Nulls and Three-Valued Logic
NULL Comparison
Unknown Is Not True
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.