You have to use condition PublisherID IS NOT NULL inside sub query. Your NULL record was returning false for all rows.
SELECT PublisherID
FROM Publisher
WHERE PublisherID NOT IN (SELECT PublisherID FROM Book WHERE PublisherID IS NOT NULL);
Alternativaly you can use LEFT JOIN and add a condition with WHERE b.PublisherID IS NULL.
SELECT *
FROM Publisher p
LEFT JOIN Book b
ON b.PublisherID = p.PublisherID
WHERE b.PublisherID IS NULL
To find out the publisher that has published more than 1 book you can use GROUP BY & HAVING with IN like below.
SELECT PublisherID
FROM @Publisher
WHERE PublisherID IN (
SELECT PublisherID
FROM @Book
WHERE PublisherID IS NOT NULL
GROUP BY PublisherID
HAVING COUNT(PublisherID) > 1
);