NULL is not a value, it is the absence of one — so it does not equal anything, not even another NULL. Almost every NULL bug in production is that one sentence, unlearned. These 23 challenges run in your browser on real tables. Cards marked Free are open to free accounts — your first 10 challenge solves are free — and Pro opens every card.
= NULL never matches: 12 challengesComparing to NULL with = does not return false, it returns unknown, and WHERE keeps only rows that are true. That is why WHERE manager_id = NULL returns nothing at all rather than the rows you meant — you need IS NULL. The same rule is what makes NOT IN against a nullable column return zero rows, the trap the NOT IN trap walks through.
Counted from the challenge bank, September 2026. Easy first, then Medium, then Hard.
Finance & Banking track · Uses: LEFT JOIN IS NULL CTE
Uses: SELECT julianday CASE GROUP BY NULL Handling AVG
Uses: SELECT CASE COALESCE LEFT JOIN CTE julianday
COALESCE(col, 0) returns the first argument that is not NULL, which is how a missing number becomes a zero in a report rather than a hole in a chart. NULLIF(a, b) does the reverse and is the standard guard against divide-by-zero. The judgement is not the syntax, it is whether a default belongs there at all: a missing rating is not a rating of zero, and averaging it as one is a wrong answer that looks right.
Counted from the challenge bank, September 2026. Easy first, then Medium, then Hard.
Uses: LEFT JOIN COALESCE Aggregation
Uses: SELECT CASE COALESCE LEFT JOIN CTE julianday
Uses: NULLIF COALESCE Window Functions
COUNT(*) counts rows; COUNT(column) counts rows where that column is not NULL, and the gap between the two numbers is the missing data. AVG, SUM and MIN ignore NULLs entirely, so an average over a half-empty column is an average of the half that exists — usually right, occasionally the bug. These are the challenges where the answer depends on knowing which.
Counted from the challenge bank, September 2026. Easy first, then Medium, then Hard.
Finance & Banking track · Uses: GROUP BY Aggregation IS NULL
Uses: LEFT JOIN COALESCE Aggregation
Uses: SELECT julianday CASE GROUP BY NULL Handling AVG
Uses: SELECT CASE COALESCE LEFT JOIN CTE julianday
Uses: SELECT CTE Window Functions LAG strftime NULL Handling
Uses: NULLIF COALESCE Window Functions
NULL rarely arrives on its own. It arrives through a LEFT JOIN, which is the machine that manufactures it; it survives into an aggregate that quietly drops it; and it breaks anti-joins written with NOT IN instead of NOT EXISTS. If you want the reading rather than the practice, IS NULL vs = NULL is the short version and five NULL mistakes the long one.