Episode 02 / SQL
Join Duplication Debugging Workflow
When a join pushes the numbers up, I check row counts and aggregation first. Then I work through key uniqueness, table grain, join type, and null behavior before changing the query.
By Mario Caesar ·

░░░░░░░░▒░░░░░░░░░░░▒▒░░░▒░░░░░░░▒░░░░░░░░░▒░░░░░░░▒░░░░░░░░░░░░░░▒░▒▒░░▒░▒░░░░░▒░░░░░░░░░░░░▒▒░
░░░░░░░░░░░░░▒░░▒░░▒▒▒▒▒▒▒░▒░░▒▒░░░░░░░▒░░░▒░░░░░░░░░░░░░░░░░░▒░▒░▒▒▒▒░░░░░░▒░░░░░▒░░░▒▒░▒▒░░░░░
▒░░░░░░░░░░░░░░░░▒▒▒░░░░░▒░░░░░░░░░░░░░░░░░░░░▒░░▒░░░░▒░░░░░▒░░▒▒▒░░░░▒░░░░░░░░▒░░░░░░░░░░░░░░▒░
░░░▒░▒░░░▒░░░░░▒▒░░░░░░░░░░░▒░░░░▒░░░░▒▒░░░░░▒░▒░░░░░▒░░▒░░░▒░░░░░░░░▒░░░▒░░░░░░░░░░░░░░░░░▒░▒░░
░▒░░▒░░░▒░░░░▒▒▒░░░░░▒░▒▒░░░░░░░░░▒░▒░░░░░░░░░░░▒░░░░▒▒░░░░░▒░▒░░░░░░░░▒░░▒▒░░▒░▒░▒░░░░░░░░░░▒░░
░▒▒░░░▒░░░░▒░▒░▒░▒░▒░▒░▒░░░░░░░░░░░░░░░▒░░▒░░░░░░▒░▒▒▒░░▒░░░░▒░▒░░░░░░░░▒░░░░░░▒░░░▒░░░░░░▒░░░░▒
░▒▒░░░░░░░░░▒░▒░░░░░░░░░▒▒▒▒▒░░▒░░░░░░▒░▒░▒▒░░▒░░░░░░░░░░░░░▒░░░░░░░░░▒░▒▒░░▒░▒░░░░░░░░░░▒▒░░░▒░
░░░▒░░░░░░░▒▒░░▒▒░░▒▒░░░░░░░░░░▒░░░░░░░░░░░░░░░░░░░░░░░░░▒░░░░▒░░░░░░░▒░▒░▒░░░░░▒░░░░▒▒▒▒░░░░░░░
░░▒░▒░▒▒░▒░░░▒░░░▒░▒░░░░░░░░▒░░░▒▒░░░░░░░░░░░░░░░▒░▒░▒░░░▒░░▒░░░░░░░▒░░▒▒░▒░▒░░░░░░▒░░░░░▒░░░░░░
░░░░░░░░▒░░░▒░▒░░░░░░░▒▒░░░▒░░▒░░░▒▒░░░░▒░░▒░░░▒░░░▒░░░▒░░░░░▒▒░░▒░░▒▒░░▒▒░░▒▒░░░░▒░▒░░░░░░░▒▒░░
░░░░▒▒░░░░░░▒░░░░░░░░░░░░░░░░░▒▒░▒░▒░▒░░░░░░░░░░▒▒▒▒▒░░░░░░▒░░░▒░░▒░░░▒░░░░▒▒░░░░░░▒░░░▒░▒░▒░░░▒
░░▒░░▒░░░░▒░░░░░▒░▒░░░▒░░░░░░▒░▒▒░░░░░░░░░░░░▒▒▒░░░░░░▒░▒░░░░░░▒▒░░▒░░░▒░▒▒░░░░░▒▒░▒▒░▒░▒▒░▒░▒░░
░░▒░░▒░░░░░░▒░░░░░░░░▒░░░░░░░░░░░░▒░░░▒▒░░░▒▒▒▒░░░░░▒░░▒▒░░▒░░▒░░░░▒░▒░░░░▒░░░░░░▒▒░░░░░░░░░▒░░▒
░▒░░░░░░░░░░▒▒░░░░░░▒░░░░░░░░░░░░▒▒░░░░░░░░▒░░░░▒░░░░░░░░▒░░░░░▒░░░▒░░░░▒▒░░░░░░▒░░░░░░░░░▒░▒░░░
▒░░▒░░░░░░░░░▒░░░▒░░░░▒░░░▒░░▒▒░▒░░▒▒░▒░░▒░░░░░░░░░░░░░▒░▒░░░░░▒▒░░░░░░░░░░░▒░░░░░░░░░░░░░░░░░░░
░░░▒▒░░░░░░░░░░░░░░▒░░░░░▒░░░░░▒░░▒░▒░░░░░░░░░░░░░▒░░░░░░░░░░░░░░░░░░░░░░░░░░▒░░▒░░░▒░░░░▒░░░░▒░
░░░░▒░░░░░░▒▒░░░░░▒░░░░▒░▒░▒░░░░░░░░░░░░░░░░░░░▒░░░░▒░░░░▒░░░░░▒░░░░░░░▒░▒▒░░░░░░▒░░░░░░░░▒▒░░░░
░░░░░░░▒░░░░░░░░░░▒░░░░░░░░░░░▒░░▒░░░░░░▒▒░▒▒░░░░░░░░▒░▒░░░░▒░░▒▒░░▒▒░▒▒░░░░░░░░░░░░░▒░▒░░░░▒░░░
▒░▒░░░░░▒▒░░░░▒░▒░░▒░▒░░▒░░░░░▒░▒░░░░▒░░░░░░░░▒░░░▒░░▒▒░▒░░░▒░░▒░░▒░░░▒░░░░▒░░▒░░░░▒░░░░▒░░░░░░░
░▒▒░░░░░░░░░░▒░▒░░▒░░░░░░░░░░░▒░░░▒░░░░░░░░▒░░░▒░░░░░░░▒░░░░░░░░░░░▒░▒░▒░░░░▒▒░░░░▒░░░░░░░░░▒▒░░
▒░░▒░░░▒░░▒░░░░░░░░░▒░░░░░░░░▒░▒▒░░░░▒░░░░░░░░░░░░░░░░░▒░░░▒░░░░▒░░▒▒░░░▒░░░░░░▒▒░░░▒▒░░░░▒░░▒▒░
░░░░▒░░░░░░▒░░░▒░░░░▒░░░░░░▒░░░░░░░░▒▒░░░▒░░░░░▒░▒▒░░░░░░░░▒░▒░░░░▒▒░░░░░▒░▒░░░░░░░▒░▒░▒░▒░░░░░░
▒░░░▒░▒░░░▒░░░░▒░▒░▒░░░▒▒░▒▒░░░░░░▒░▒░░░░░░░░░░░▒░░░▒▒░░▒▒░░░░░░░░░▒░░░░░░░░▒░░░░░░░░░░▒░░░░░▒░░
░▒░░░░░░░░░▒░░░░░░▒░░░▒▒░░░░░░░▒░░▒░░░▒░▒▒░░▒▒░▒░░░░░░░░░░░░░░░░▒░░▒░▒░░░░░░░░░░░▒░░░░░░░░░░░░▒░
░▒░░░░░░▒░░░░░░▒░░▒░░░░░░░░░▒░░░░▒░░░░░░░░░▒░░░░░░░▒░░░░░░░░░▒░░▒▒░░░▒░░░░▒░░▒▒░░░▒▒░░░░▒░░░░░░░
░▒▒░▒░▒▒▒░░░▒░░░░▒▒░▒░░░░▒▒▒▒░░▒░▒░░░░░▒░░░░░░░░░░░░░░░▒▒░▒░░░░░▒░▒░░░░░▒░░░░░░░▒░░▒░░▒░░░░▒░░▒░
░░░▒░░░▒░░▒▒▒░░▒░▒░▒░░▒▒▒░░░░░░░░░░▒░▒░▒░░▒░░░░░░░░▒░░▒▒░░░▒░░░░░░░░░░▒░▒░░░▒░░░░░▒░░░░░░░░░▒░░▒
░░░░░░░▒▒░▒░░░░▒░░░░▒░░▒░░░░░▒░░░░▒░░░░▒░░░░░░░░▒░▒░▒░░░░░░░░░░░░░░░░░░▒░▒░░░░░░░░▒░░░░░▒▒░▒░░░░
▒░▒░▒░░░░░▒▒▒░▒░░░▒░░░░░░░░░▒░▒░░░░░░░▒░░▒░░░▒▒▒░░░░▒░▒░░░▒░░▒░░▒░▒░▒░░░▒░░░░░░░░░▒▒▒░▒▒░░▒░░░░▒
░░░░▒░░░░░░░░░▒░░░░░░░░░▒░░▒░░░░░░░░▒░░░░▒░░░░▒░▒░░░░░░▒░░▒░░▒▒▒░░░░░░░░▒▒░░░▒░░░░▒░░░░▒░░░▒░▒▒░
░░▒▒░░▒░░░░░▒░░░░░░▒░▒▒░░▒░░░▒░░░░░░░░░░░░▒░░░░░▒░░░░░░░░░▒░▒░░░░▒░░░▒░░░░▒░░░░░░░▒░░░░▒░░░░░▒░▒
░░▒░░░▒░▒▒░▒░░░░░░░░▒░░░░░░░░░░░░▒░▒▒░▒░▒░░░▒░░░░░░░░░▒░░░░░░▒░░░░░░░▒▒░░▒░░░░░░░░▒░░▒▒░░▒░▒▒░░░
▒░░▒▒░░░░░░▒░░░░░░░░░░░░░░▒░░░░░░░░▒░░░░░░░▒░▒░░▒▒░░░░░▒░░▒░░░░░░░▒░░░░░░░░░░░▒░░░░░▒░░░░▒░░░░░░
░░▒░░░░░▒▒▒░░▒░░░░░▒░▒░░░░░░░▒░░░░░░▒░░▒░░░░▒░░░░░░▒░░░▒░░░░░▒░▒░░▒░░░░░░░░░░░░░▒░▒▒░░░▒░▒░░▒▒▒░
░▒░░░░▒░░░░▒░░░░░░▒░░░░░▒▒░░░░░░░▒░░▒░▒▒░░░░░░░▒░▒░░░░░░░▒▒░░▒░░░░░░▒░░░░░▒▒▒▒░░░░░░░░▒░░░░░▒░░░
░▒░░░░░▒░░░░░░░░░░░░░░░▒░░░░░░░▒░▒░░░░░░░░░▒░░░░▒░░░░▒░░░░▒░▒▒░░░░░▒░░░░░░░░░░░░░▒░░░░░▒░░░░░░░░
░▒░░░░░░░░░░░▒░░▒░▒░░░░▒░░░░░░░░▒░░░░░░░░▒░░░▒░░░▒░░░░▒░░░▒░░░░░░░▒▒░░░▒░░░░░░░░▒░░░░░░░░░░░░░░░
░░░░░░░░░░░▒▒▒░░░▒░▒▒▒░▒░░▒░░░▒░░░▒░░░░▒░░░░▒▒░░░▒░░░░░░░░░░░░░▒░▒▒░░░░░░▒▒▒░░░░░░░░░░░▒▒░▒░░▒░░
░▒░░░░░░░░▒▒░░░░░░░▒▒░░░▒░░▒░░░░░▒░░▒░░░░░░▒░▒░░░░▒░░░▒░░▒▒░▒░░░░░▒░░▒░▒▒░░░░░░░░▒░▒░░░░░░░░░░▒░
░▒░▒▒░░░▒░░░▒░░░░░▒▒▒░▒░░░░░░▒░░░▒░░▒░░░▒▒▒░░▒▒░░░░░░░▒░░▒░░▒░░░▒▒░░░▒░░░░░░░░░▒░░░░▒░▒▒░░░░░▒░░
░░░▒░░░░░░░░░░░░░▒▒░░░░░░░▒░░░░░░░▒░░░░░▒░░▒░▒░░░░░▒▒░░░░░▒░░▒░░░░░░░░▒▒▒░▒░░░▒░░░░░▒▒░░░░░▒▒░░░
░▒░░░░░░░░░░░░░░░░▒░░░░░░▒░░░░░░░░░▒▒▒▒▒░░░░░░░▒░▒░░░░░░░░▒░░░░░░░░░░░░░░░░░░░░░▒░░▒░░▒░░░░░░░▒░
░░░░░░░░░▒░░▒░░░▒░░▒▒▒▒░░▒░░▒░░▒░░░░░░▒▒░░░░░▒░░░░░▒▒░░░▒▒▒░░▒░░▒░░▒░▒░░░░▒░░▒▒░▒░▒▒░░░░░░░░░▒░░
░░░░▒▒▒░▒▒▒░░░░░░▒░░▒▒░░░░░░▒░░░░░░░░▒▒░░▒░░▒▒░▒▒░░░░░░░░░▒░░░░░░▒░░▒░░░░░░░░░░░░░░▒░░░░░░░░░▒░░
░░░▒░░░░░░░▒░░▒░░▒░░░▒▒░░░░░▒░░░░░░░░▒░░░░▒░░▒▒░░▒▒░▒░░░░░░░░░▒░░░░░░░░░░░░░░░░░░░░░░░▒░░▒░░░░░▒
░░░░▒░░░░░░░▒░░░░░░▒▒░░░░▒▒▒░░░░▒░░░░░░▒░░░░▒░░░▒░▒░░░░░░░▒░░░▒░░░░░░░░░░░░░░░░░░░░░░░░░▒░░▒░░░░
░░░░░░▒░░░░▒░░▒░░░░░░░░░░░░░▒▒░░▒░▒▒░░░░░░░▒░▒▒░░░▒░░░▒░░░░▒░░░▒░░░▒░▒░░░░░░░░░░░▒▒░▒░░░▒░░░░░░░
░░░░░░░░▒▒░░░▒░░░░░░░▒░░░░░░░░▒▒░░░░░░▒░░░░░░▒░░░░░░░░░▒░░░▒▒░░░░░░░░▒░▒░░▒░▒░░░░▒░░▒░░░░▒▒░░░▒▒
░▒▒░▒░░░░░░░░░▒░░▒░░░░▒░░░▒░░░▒░░░░░░░░░░░░░░░▒░░░░░▒░░░░░░▒░▒░░░▒▒▒░▒░░░░░░▒░░░░░░░▒░▒░▒░░▒▒░░░
░░░░░░▒░░░░░░▒▒░░▒░░░▒░▒░▒░░░▒▒░░▒░░░░░░░░░░░░░░░▒░▒░▒░░▒░░░░░░▒░░░░░░░░░░▒░░░░░▒▒░░░░░░░▒░░░░░▒
▒▒▒░░░▒░░▒░░▒░▒░▒░▒░░░░▒▒░░▒▒░░░░░░░░░░░░▒░░░░░░░░▒░░░░░░░░░░░░▒▒░░░░▒░░▒░░░░░░░░▒░░░░░░░░░░░░░░
░░░▒░▒░░░▒░░░▒░░░░░░░░░░▒░░░░▒░▒░░░░░▒░░▒░░▒░░░▒░░░░░░░░░░░░░░▒▒░▒▒░▒░░░░░░▒░░░░░░▒░░░░░░░░▒░░░░
░░░░▒▒▒▒░░▒░░░░░▒░░░▒░▒░░░░░▒░░░▒░▒░▒░░░░░░▒░░░░░░░░░░░▒░░▒░▒░▒░░▒░▒░░░▒░░░░▒░░░░░░░░░▒░░░░▒░░░░
▒░▒░░▒░▒░░░░░▒░▒░░░░▒░░░░▒░░▒░░░▒░░░░░░░░░░░░▒▒░░░░░░░▒░▒░░░░░░░▒░░░░░░░░▒▒▒░▒░▒░░▒▒░▒░░░░░░▒░▒░
▒░░░░▒▒░░░░▒░░░░░░▒░░░░░░▒░░░▒░░░░░▒░▒▒░░░▒░░▒▒░░░░░░░▒░▒░░▒░░░░░░░░▒░░░░░▒▒░░░░░░░▒░░▒▒░░▒░▒░░░
░░░░░░░░░░▒░░▒░░░░░░░░░░░░░░░░▒░░▒░░░▒░▒░░░░░░░░░░░░░▒░▒░▒▒░░░▒░░░░▒░░░▒░░░░░░░░░░░░░░▒▒░▒░░░░▒░
░░░░▒▒░░░░░░░▒▒░░░▒░░▒░░░░░▒░░░▒░░░░░░░░░░░░░▒░░▒░░░░▒░░░▒▒░░░░░▒░░▒░▒░░░░░░░░░░▒░▒░░░░▒▒░░░░▒░░
░░░▒░░░▒░░░▒░░░░░░░░░░░░▒░░░░░▒░░░░▒░▒░░░░░░░░░░▒░▒░▒░▒░▒░▒░▒░░▒▒▒░░░░░░░░▒░░░░▒░░░░░░░░▒░░░░░░░
░▒░░▒░░░░░░░▒░░▒░░░░░░░▒░░▒░░▒░░░░░░░░░░░░░▒▒░░░░░░░░░░░░░░░░░▒░░░░░░░░░░▒░░▒░▒▒░▒░░░░░░▒░░░▒░░▒
░░░░░░░░░░░░░░▒▒░░░░░░░░░░░░░▒▒░░░▒░░░░░░░░░░▒░▒░░░░▒░░▒░░░░░░░░░░░░░▒▒░▒░░░░░░░░░▒▒░░░░░░░░░░░▒
░░░░░░░░░░░░░░░▒░▒░░░░░░░░░░▒░▒░░░░░░░░░▒░▒▒░░▒░░░░░▒░▒░░▒░░░░░░░░░▒░░░░░░░▒░▒░░░░░░░▒░▒░░░░░▒░░
░░▒░░░▒░░░▒░▒░░▒░░░▒▒▒░░░▒░░░▒░░░▒░░░░▒░░▒░▒░░░░░░░░░░░░▒░▒░░░░░░░▒░░░▒░░░▒░░░░▒░▒░░░░▒░░░░░░░░░
▒▒░░▒░▒▒▒░░▒░░░░░░░░░░░░░▒░░▒░░░▒░▒░▒░░▒░░░░░▒░░░░░░░░░░░░░░░░░░▒░▒░░░▒░░░░░░▒░▒░░░▒░░░░░░░░░░░░
▒░▒░░░░░▒░░░░░▒░░░░░░░░▒▒▒░░░░▒░░░░▒▒░░░░░░░░░░░░░░░░░░░░░░░░░░░░▒▒░░░▒░░░░░▒░░▒░░▒░▒░░▒▒░▒░▒░░░
Reading the sketch
Confirm the symptom
Compare row counts and metrics before and after the join.
Check aggregation and keys
Review the aggregation logic and test whether the join keys are unique.
Compare table grain
Check whether both sides of the join describe data at the same grain.
Inspect join behavior
Review the join type and look for unexpected nulls or dropped rows.
Trace the cause
Use the evidence from each check to identify the root cause before changing the query.
