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
);