Le on La clause est utilisée lorsque le join recherche des lignes correspondantes. Le where La clause est utilisée pour filtrer les lignes une fois toutes les jointures effectuées.
Un exemple avec des toons Disney votant pour le président :
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'
Cela renvoie toujours Romney même si Donald n'a pas voté pour lui. Si vous déplacez la condition de on à where clause :
select *
from @candidates c
left join
@votes v
on c.name = v.voted_for
where v.voter = 'Donald Duck'
Romney ne figurera plus dans le jeu de résultats.