Il on La clausola viene utilizzata quando il join sta cercando righe corrispondenti. Il where La clausola viene utilizzata per filtrare le righe al termine di tutte le operazioni di unione.
Un esempio con i cartoni animati Disney che votano per la presidenza:
declare @candidates table (name varchar(50));
insert @candidates values
('Obama'),
('Romney');
declare @votes table (voter varchar(50), voted_for varchar(50));
insert @votes values
('Mickey Mouse', 'Romney'),
('Donald Duck', 'Obama');
select *
from @candidates c
left join
@votes v
on c.name = v.voted_for
and v.voter = 'Donald Duck'
Questo restituisce ancora Romney anche se Donald non ha votato per lui. Se sposti la condizione da on al where clausola:
select *
from @candidates c
left join
@votes v
on c.name = v.voted_for
where v.voter = 'Donald Duck'
Romney non sarà più nel set di risultati.