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.