NOT flips TRUE and FALSE while UNKNOWN remains UNKNOWN.

highlighted = computed this step

NOT inverts truth

NOT flips TRUE to FALSE and FALSE to TRUE. UNKNOWN stays UNKNOWN.

invert TRUE and FALSE\text{invert TRUE and FALSE}

Read NOT rows

The NOT expression has 1 TRUE row.

NOT TRUE rows=1\text{NOT TRUE rows}=1

Boolean-filter examples are tiny finite WHERE-style filters with SQL-style TRUE/FALSE/UNKNOWN logic; SQL dialect completeness, type coercion, optimizer behavior, indexing, and product claims are out of scope.

NOT inverts truth: base rowsidagestatus130active217active3NULLactive440paused525NULL Boolean predicate evaluationsourcevaluestruthkepttrace0[1, 30, active]FALSEno[status eq active -> TRUE, NOT TRUE -> FALSE]1[2, 17, active]FALSEno[status eq active -> TRUE, NOT TRUE -> FALSE]2[3, NULL, active]FALSEno[status eq active -> TRUE, NOT TRUE -> FALSE]3[4, 40, paused]TRUEyes[status eq active -> FALSE, NOT FALSE -> TRUE]4[5, 25, NULL]UNKNOWNno[status eq active -> UNKNOWN, NOT UNKNOWN -> UNKNOWN] Boolean filter output rowsidagestatus440paused Boolean filter factsfactvalueinputRowCount5outputRowCount1trueRows1falseRows3unknownRows1rootKindnottreeNOT(status eq active)rowOrdersource_order

UNKNOWN remains

A missing status remains UNKNOWN after NOT.

UNKNOWN unchanged\text{UNKNOWN unchanged}

Summary

NOT changes the truth value; it does not fill missing data.

no hidden value\text{no hidden value}