Er is één berucht probleem voor not in
. Kortom, id not in (1,2,3)
is een afkorting voor:
id <> 1 and id <> 2 and id <> 3
Als uw TimeEntries
tabel bevat elke rij met een TaskID
van null
, de not in
vertaalt naar:
ID <> null and ID <> 1 and ID <> 2 AND ...
Het resultaat van een vergelijking met null
is altijd unknown
. Sinds unknown
is niet waar in SQL, de where
clausule filtert alle rijen uit en u verwijdert uiteindelijk niets.
Een gemakkelijke oplossing is een aanvullende where-clausule in de subquery:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)