За вътрешни съединения като това те са логически еквивалентни. Въпреки това можете да попаднете в ситуации, при които условие в клаузата за присъединяване означава нещо различно от условие в клаузата where.
Като проста илюстрация, представете си, че правите ляво присъединяване по този начин;
select x.id
from x
left join y
on x.id = y.id
;
Тук вземаме всички редове от x, независимо дали има съвпадащ идентификатор в y. Сега да кажем, че нашето условие за присъединяване нараства – ние не търсим само съвпадения в y въз основа на идентификатора, но и на id_type.
select x.id
from x
left join y
on x.id = y.id
and y.id_type = 'some type'
;
Отново това дава всички редове в x, независимо дали има съвпадение (id, id_type) в y.
Това обаче е много различно:
select x.id
from x
left join y
on x.id = y.id
where y.id_type = 'some type'
;
В тази ситуация избираме всички редове от x и се опитваме да съпоставим с редове от y. Сега за редове, за които няма съвпадение в y, y.id_type ще бъде нула. Поради това y.id_type ='some type' не е удовлетворен, така че тези редове, където няма съвпадение, се отхвърлят, което ефективно превръща това във вътрешно присъединяване.
Накратко:за вътрешните съединения няма значение къде отиват условията, но за външните съединения може.