Comparing anything to NULL produces an unknown result, not true or false.

Program

Play the script to compare task dates with a selected day and see the missing date stay NULL.

null_comparison.sql
CREATE TABLE tasks (name TEXT, completed_on TEXT);
INSERT INTO tasks VALUES ('write', '2026-02-01'), ('review', NULL), ('ship', '2026-02-02');
WITH params(target_day) AS (VALUES ()) SELECT name, completed_on, completed_on = (SELECT target_day FROM params) AS same_day FROM tasks ORDER BY name;
CREATE TABLE tasks (name TEXT, completed_on TEXT);
INSERT INTO tasks VALUES ('write', '2026-02-01'), ('review', NULL), ('ship', '2026-02-02');
WITH params(target_day) AS (VALUES ()) SELECT name, completed_on, completed_on = (SELECT target_day FROM params) AS same_day FROM tasks ORDER BY name;
CREATE TABLE tasks (name TEXT, completed_on TEXT);
INSERT INTO tasks VALUES ('write', '2026-02-01'), ('review', NULL), ('ship', '2026-02-02');
WITH params(target_day) AS (VALUES ()) SELECT name, completed_on, completed_on = (SELECT target_day FROM params) AS same_day FROM tasks ORDER BY name;
unknown `completed_on = target_day` is NULL when `completed_on` is NULL.
three-valued logic SQL conditions can be true, false, or unknown.
comparison A normal equality comparison does not turn NULL into false.