NULL comparisons produce UNKNOWN, not TRUE.

highlighted = computed this step

UNKNOWN rows stay

A NULL comparison produces UNKNOWN, and UNKNOWN is not TRUE.

UNKNOWN stays\text{UNKNOWN stays}

Read NULL status

The WHERE table has 1 UNKNOWN row, and the after table keeps 2 rows.

UNKNOWN=1\text{UNKNOWN}=1

DELETE examples are tiny finite row removals; SQL dialect completeness, joins in DELETE, subqueries, triggers, constraints, transactions, locks, indexes, optimizer behavior, performance, and product behavior are out of scope.

UNKNOWN rows stay: base rowsidownerstatuspoints1Adaopen102Benopen203Cydone154DeeNULL5 WHERE chooses rowssourcevaluecompareTotruthremoved0openopenTRUEyes1openopenTRUEyes2doneopenFALSEno3NULLopenUNKNOWNno Rows removedsourcerowreason0(1, Ada, open, 10)WHERE_TRUE1(2, Ben, open, 20)WHERE_TRUE Rows after DELETEidownerstatuspoints3Cydone154DeeNULL5 DELETE factsfactvaluebaseRowCount4removedRowCount2keptRowCount2finalRowCount2whereUnknownCount1deleteStatusremoved_rowswhereKindeq

Read removed flag

The NULL status row has removed no.

not TRUE\text{not TRUE}

Summary

DELETE follows the same TRUE-only boundary as WHERE filters.

TRUE-only\text{TRUE-only}