Unknown is not false, and a WHERE clause keeps neither
The common read: A comparison against NULL evaluates to false, so a row holding a NULL fails the test and every other row behaves normally.
Name the value 7 = NULL evaluates to, then read on. It is not false. The PostgreSQL comparison chapter says: ordinary comparison operators yield null, signifying unknown, not true or false, when either input is null; 7 = NULL and 7 <> NULL are its own two examples. SQL therefore uses three-valued logic: true, false and unknown. A WHERE clause keeps only rows whose predicate evaluated to true, so it discards rows that evaluated to unknown along with the false ones.
The worst case is the expression that looks like it finds NULLs. where plate = null against the permits table counts 0, excluding the permit with no plate, because its predicate is unknown rather than true. The documentation says not to write it, "because NULL is not 'equal to' NULL". IS NULL works: it returns 1 for the same table.
The figure's last two columns use IS DISTINCT FROM, which returns true or false even when an input is null. The section on NOT EXISTS later in this lesson explains it.
The parking-permit office runs a nightly check for permits issued without a plate on file, written with = null, and the check has reported zero every night since the day it was written. The permit in the table with no plate has never appeared in the check's results. The office learned about that permit from an audit finding about uninspected permits, and the finding blamed the clerk who runs the check.

