Expected inner-join facts are assertions only.

highlighted = computed this step

Honest by construction

Expected inner-join facts are assertions only.

compiler is source of truth\text{compiler is source of truth}

Render checked rows

The guarded join renders 3 rows after recomputation.

checked rows=3\text{checked rows}=3

Inner-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.

Honest by construction: left tablesidname1Ada2Bea3CalNULLNoKey Honest by construction: right tablesidscore1A1A23C4DNULLGhost candidate row pairsleftSourcerightSourceleftKeyrightKeymatched00[1][1]yes01[1][1]yes02[1][3]no03[1][4]no04[1][NULL]no10[2][1]no11[2][1]no12[2][3]no13[2][4]no14[2][NULL]no20[3][1]no21[3][1]no22[3][3]yes23[3][4]no24[3][NULL]no30[NULL][1]no31[NULL][1]no32[NULL][3]no33[NULL][4]no34[NULL][NULL]no inner join rowsleft.sidleft.nameright.sidright.score1Ada1A1Ada1A23Cal3C inner join factsfactvalueleftRowCount4rightRowCount5candidatePairCount20matchingPairCount3unmatchedLeftRows2unmatchedRightRows2joinRowCount3keyColumnCount1nullKeyMatches0rowOrderleft_source_then_right_source

Try to tamper

Wrong expected facts, derived sidecars, missing keys, duplicate keys, duplicate columns, bools, floats, and unsupported keys fail closed.

tamper rejected\text{tamper rejected}

Summary

The book shows exact finite inner-join behavior only; product SQL behavior is outside the model.

scoped inner join model\text{scoped inner join model}