본문 바로가기

제안&정리

[SQL] join에서 on vs where

join 에서 on과 where의 차이가 무엇일까라는 질문을 받았을 때 정확히 대답이 어려웠습니다.

 

어떤 때는 달랐던 것 같고 어떤 때는 같았던 것 같아 헷갈렸는데요.

 

관련해서 확인해보니 on 절은 join이 걸릴 때 사용되고 where 절은 join 후에 사용되었습니다.

그래서 inner join을 할 때는 결과에 차이가 없는데 outer join을 할 때는 차이가 발생하게 됩니다.

 

예를 들어 left join 할 때 아래와 같이 차이가 발생합니다.

-- left join이기 때문에 f.fname = b.bname 조건을 만족하지 않는 foo의 레코드도 결과에 포함
select * from foo f left join bar b 
on f.fid = b.bid 
and f.fname = b.bname

-- f.fname = b.bname 조건을 만족하지 않는 foo의 레코드는 결과에 미포함
select * from foo f left join bar b 
on f.fid = b.bid 
where f.fname = b.bname