このような内部結合の場合、それらは論理的に同等です。ただし、join句の条件がwhere句の条件とは異なる意味を持つ状況に遭遇する可能性があります。
簡単な例として、このように左結合を行うと想像してください。
select x.id
from x
left join y
on x.id = y.id
;
ここでは、yに一致するIDがあるかどうかに関係なく、xからすべての行を取得しています。ここで、結合条件が大きくなるとしましょう。idだけでなく、id_typeにも基づいてyで一致するものを探しています。
select x.id
from x
left join y
on x.id = y.id
and y.id_type = 'some type'
;
繰り返しますが、これにより、yに一致する(id、id_type)があるかどうかに関係なく、xのすべての行が得られます。
ただし、これは大きく異なります。
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はnullになります。そのため、y.id_type ='some type'が満たされないため、一致しない行は破棄され、これが事実上内部結合になります。
簡単に言うと、内部結合の場合、条件がどこに行くかは問題ではありませんが、外部結合の場合は可能です。