Има една прословута грешка за 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
)