Existuje jeden notoricky známý problém pro not in . V podstatě id not in (1,2,3) je zkratka pro:
id <> 1 and id <> 2 and id <> 3
Nyní, pokud vaše TimeEntries tabulka obsahuje libovolný řádek s TaskID z null , not in překládá do:
ID <> null and ID <> 1 and ID <> 2 AND ...
Výsledek porovnání s null je vždy unknown . Od unknown není pravda v SQL, where klauzule odfiltruje všechny řádky a nakonec nesmažete nic.
Snadnou opravou je další klauzule where v poddotazu:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)