Hay un problema notorio para not in
. Básicamente, id not in (1,2,3)
es la abreviatura de:
id <> 1 and id <> 2 and id <> 3
Ahora, si sus TimeEntries
la tabla contiene cualquier fila con un TaskID
de null
, el not in
se traduce como:
ID <> null and ID <> 1 and ID <> 2 AND ...
El resultado de una comparación con null
siempre es unknown
. Desde unknown
no es cierto en SQL, el where
La cláusula filtra todas las filas y terminas sin eliminar nada.
Una solución fácil es una cláusula where adicional en la subconsulta:
DELETE FROM Tasks
WHERE ID not IN
(
SELECT TaskID
FROM TimeEntries
WHERE TaskID is not null
)