Semi-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 table emp_id name dept_id 1 Ada 10 2 Ben 20 3 Cy 20 4 Dee 30 5 Eli NULL
Honest by construction: right table dept_id dept_name 10 ops 20 eng 20 platform NULL unknown
candidate pairs leftSource rightSource leftKey rightKey matched 0 0 [10] [10] yes 0 1 [10] [20] no 0 2 [10] [20] no 0 3 [10] [NULL] no 1 0 [20] [10] no 1 1 [20] [20] yes 1 2 [20] [20] yes 1 3 [20] [NULL] no 2 0 [20] [10] no 2 1 [20] [20] yes 2 2 [20] [20] yes 2 3 [20] [NULL] no 3 0 [30] [10] no 3 1 [30] [20] no 3 2 [30] [20] no 3 3 [30] [NULL] no 4 0 [NULL] [10] no 4 1 [NULL] [20] no 4 2 [NULL] [20] no 4 3 [NULL] [NULL] no
existence per left row leftSource leftKey matchingRightSources exists kept 0 [10] [0] yes yes 1 [20] [1, 2] yes yes 2 [20] [1, 2] yes yes 3 [30] [] no no 4 [NULL] [] no no
semi join kept-left rows emp_id name dept_id 1 Ada 10 2 Ben 20 3 Cy 20
semi join facts fact value leftRowCount 5 rightRowCount 4 candidatePairCount 20 matchingPairCount 5 leftRowsWithMatch 3 keptLeftRows 3 droppedLeftRows 2 duplicateRightMatches 2 nullKeyCandidatePairs 8 mode semi rowOrder left_source_order_once