DISTINCT starts from visible bag rows.

highlighted = computed this step

Bag input rows

DISTINCT starts after SQL has visible bag rows, including repeats.

bag rows first\text{bag rows first}

Show the input

The input bag has 6 rows.

input rows=6\text{input rows}=6

DISTINCT examples are tiny finite bag-to-table transforms; this model shows first-seen representatives for deterministic display and does not claim product SQL output ordering.

Bag input rows: bag input rowsidcitystatus1Austinopen2Austinopen3Bostonclosed4Austinclosed5NULLopen6NULLopen WHERE then SELECT projectionsourceinputwhereTruthprojectedRowdistinctRole0[1, Austin, open]TRUE[Austin]representative1[2, Austin, open]TRUE[Austin]duplicate2[3, Boston, closed]TRUE[Boston]representative3[4, Austin, closed]TRUE[Austin]duplicate4[5, NULL, open]TRUE[NULL]representative5[6, NULL, open]TRUE[NULL]duplicate DISTINCT groupskeysourcesrepresentativeSourceduplicateCount[Austin][0, 1, 3]02[Boston][2]20[NULL][4, 5]41 DISTINCT output rowscityAustinBostonNULL DISTINCT factsfactvalueinputRowCount6whereKeptRows6whereDroppedRows0projectedRowCount6distinctRowCount3duplicateDropCount3nullKeyRows2selectColumnCount1representativeOrderfirst_seen_model_order_not_sql_order_claim

Repeats are allowed

The same city can appear in more than one source row before DISTINCT runs.

duplicates visible\text{duplicates visible}

Summary

DISTINCT does not change the source bag; it works after the chosen output shape is made.

after source rows\text{after source rows}