본문 바로가기
프로그래밍/TSQL

조인 조건절 위치에 따른 차이 설명 (SQL join where clause vs on clause)

by 정리 습관(★arranging★) 2020. 2. 14.
728x90

Left join 에서 Where 절에 조건이 들어가는 경우와 On 절에 조건이 들어가는 경우의 차이 하고자 합니다.

개념적 이해
대상의 범위를 먼저 지정하냐 나중에 지정하냐의 차이
(on -> where)

Inner join 일 경우는 상관 없는 문제.
outer join 일 경우에는 상관이 있음.

 

Optimizer 는 이렇 게 해석합니다.

WHERE 절: 조인한 후에 필터링(= null 포함 된 대상에 대해 null이 아닌 대상으로 필터링)
ON 절 : 조인하기 전에 필터링(= 필터링 후 outer join결과 null 출력 가능)

조인의 기준(driving) 테이블의 조건은 on/where 어디든 동일 하지만 
조인 대상 테이블의 조건은 on에 작성되어야 원하는 결과를 볼수 있다. ( where 절은 inner join과 동일하게 동작 )
select *
from A left join B on A.c1 = B.c1
where B.c2 = 5 
-->해석: A기준으로 B를 조인하고 (B가 NULL인 대상 포함) --> B를 값으로 필터링 ( B 에 NULL이 아닌 값인 것만 출력 )


select *
from A left join B on A.c1 = B.c1 on B.c2 = 5 

--> 해석 : B를 값으로 필터링 --> A기준으로 B를 조인(B가 NULL인 대상 포함)

조인 전에 거르냐 후에 거르냐의 문제로 한번만 잘 생각해보면 당연한 문제이지만 자주 헷갈리는 부분입니다.

댓글