Има една прословута грешка за not in
. По принцип id not in (1,2,3)
е съкращение за:
id <> 1 and id <> 2 and id <> 3
Сега, ако вашите TimeEntries
таблицата съдържа всеки ред с TaskID
от null
, not in
се превежда на:
ID <> null and ID <> 1 and ID <> 2 AND ...
Резултатът от сравнение с null
винаги е unknown
. От unknown
не е вярно в SQL, where
клауза филтрира всички редове и в крайна сметка не изтривате нищо.
Лесна корекция е допълнителна клауза where в подзаявката:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)