C'è un famigerato trucco per not in
. Fondamentalmente, id not in (1,2,3)
è l'abbreviazione di:
id <> 1 and id <> 2 and id <> 3
Ora se il tuo TimeEntries
la tabella contiene qualsiasi riga con un TaskID
di null
, il not in
si traduce in:
ID <> null and ID <> 1 and ID <> 2 AND ...
Il risultato di un confronto con null
è sempre unknown
. Poiché unknown
non è vero in SQL, il where
La clausola filtra tutte le righe e finisci per non eliminare nulla.
Una soluzione semplice è una clausola where aggiuntiva nella sottoquery:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)