NOT IN compares each input value with a candidate list.
candidate list
Read candidates
The candidate list has 2 values, and candidateHasNull is yes.
candidate has NULL
NOT IN examples are tiny finite WHERE-style filters with SQL-style TRUE/FALSE/UNKNOWN behavior; correlation, optimizer behavior, execution cost, indexing, SQL dialect completeness, and database-product claims are out of scope.
NULL candidate is visible
The NULL candidate is shown as a list row before any truth value is trusted.
visible NULL candidate
Summary
A NULL in the list is the sharp edge for later non-matches.