WHERE keeps a row only when the predicate is TRUE; it drops FALSE and UNKNOWN alike. A comparison against NULL is UNKNOWN, so any plain <> / = filter silently discards the NULL rows — the root cause behind many filtering and aggregation surprises.
SELECT id FROM tickets WHERE priority <> 'high' ORDER BY id;
SELECT id FROM tickets WHERE priority IS DISTINCT FROM 'high' ORDER BY id;
The 'not high priority' queue loses every ticket with a blank priority — WHERE drops the UNKNOWN rows along with the FALSE ones.
When NULL rows should survive a not-equal filter, use IS DISTINCT FROM, or add OR col IS NULL explicitly.