IS NOT NULL flips the NULL-test truth.

highlighted = computed this step

IS NOT NULL

IS NOT NULL flips the IS NULL truth values.

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

Read inverted rows

IS NOT NULL has 3 TRUE rows and 2 FALSE rows.

present TRUE rows=3\text{present TRUE rows}=3

NULL-test examples are tiny finite-table transforms for IS NULL and IS NOT NULL; SQL dialect completeness, optimizer behavior, indexing, and product claims are out of scope.

IS NOT NULL inversion: base rowsidnamecityscore1AnnAustin102BoNULL203CyBostonNULL4DiNULL305EliDenver40 NULL test result per rowsourcetestedValueisNulltruthoutputRole0AustinnoTRUEkept1NULLyesFALSEdropped2BostonnoTRUEkept3NULLyesFALSEdropped4DenvernoTRUEkept WHERE-style TRUE-only output rowsidnamecityscore1AnnAustin103CyBostonNULL5EliDenver40 NULL-test factsfactvalueinputRowCount5nullCount2presentCount3trueCount3falseCount2unknownCount0outputRowCount3droppedRowCount2negatedyeswhereKeepsTRUE_only_source_order

Present rows are kept

Present city values become TRUE under IS NOT NULL.

present kept\text{present kept}

Summary

The inversion stays two-valued: TRUE or FALSE only.

no UNKNOWN after NOT\text{no UNKNOWN after NOT}