Multiple right matches expand a left row before filtering.

highlighted = computed this step

One left row can repeat

If one left row matches more than one right row, it appears once per match.

one left row repeats\text{one left row repeats}

Read repeated output

The first left row has 2 right-side matches, and the joined table has 6 rows before WHERE.

joined rows=6\text{joined rows}=6

Outer-join examples are tiny finite-table transforms; SQL dialect completeness, type coercion, optimizer behavior, execution cost, indexing, and database-product claims are out of scope.

One left row can repeat: left tablecidname1Ada2Bea3Cal4DeeNULLNoKey One left row can repeat: right tablecidorder_idstate1101paid1102open3103paid5104paidNULL105ghost match pairsleftSourceleftKeyrightSourcesmatchCount01[0, 1]212[]023[2]134[]04NULL[]0 left outer join rowsleft.cidleft.nameright.cidright.order_idright.state1Ada1101paid1Ada1102open2BeaNULLNULLNULL3Cal3103paid4DeeNULLNULLNULLNULLNoKeyNULLNULLNULL post-join filter rowsjoinSourcekeptvalues0yes[1, Ada, 1, 101, paid]1yes[1, Ada, 1, 102, open]2yes[2, Bea, NULL, NULL, NULL]3yes[3, Cal, 3, 103, paid]4yes[4, Dee, NULL, NULL, NULL]5yes[NULL, NoKey, NULL, NULL, NULL] outer join factsfactvalueleftRowCount5rightRowCount5matchPairCount3unmatchedLeftRows3paddedRows3joinRowCount6filteredRowCount6whereAppliednonullKeyLeftRows1nullKeyMatches0rowOrderleft_source_then_right_source

No dedup step

LEFT JOIN keeps both matched rows in this finite model.

both matches stay\text{both matches stay}

Summary

Filtering later starts from this already-expanded joined table.

expanded before filter\text{expanded before filter}