SELECT *
FROM pony
WHERE id NOT IN (1, 2, NULL)
-- 0 rows, major wtf
It's because:
SELECT *
FROM pony
WHERE NOT (
id = 1
OR id = 2
OR id = NULL
)
And then remove the parenthesis using De Morgan’s laws:
SELECT *
FROM pony
WHERE
id != 1
AND id != 2
AND id != NULL
Like explained in the intro, id != NULL
is always NULL
, therefore the entire WHERE
clause is always FALSE
.
Advice:
Keep using subqueries, mind NULL
values. Still better than JOIN
s that can cause duplicates.