1. 조건절 의미
- ON 절 : 조인 조건
- WHERE : 검색 조건(필터 조건)
2. 조건 위치에 따른 결과 차이
- 이너 조인의 경우 결과에 차이는 없으나 의미에 맞는 위치에 조건을 주는게 좋습니다.
- 아우터 조인의 경우 결과에 차이가 있습니다.
3. 위 예시에서의 차이 설명
- 아우터 조인은 B 와의 조인이 실패하더라도 A 는 다 나오게 됩니다.
- ON b.seq = 144 는 144 인 것만 조인한다는 의미이고 조인에 실패해도 A 는 다 나옵니다.
- WHERE b.seq = 144 는 144 인 것만 조회한다는 의미가 됩니다. 아우터 조인이 무의미해 지겟네요.
WITH temp_test1 AS ( SELECT 143 seq FROM dual UNION ALL SELECT 144 FROM dual UNION ALL SELECT 145 FROM dual ) , temp_test2 AS ( SELECT 143 seq FROM dual UNION ALL SELECT 144 FROM dual ) -- Test 1 : 조건 없음-- SELECT * FROM temp_test1 a LEFT OUTER JOIN temp_test2 b ON a.seq = b.seq ; SELECT * FROM temp_test1 a , temp_test2 b WHERE a.seq = b.seq(+) ; -- Test 1 -- 143 143 144 144 145 null -- Test 2 : On 절 조건-- SELECT * FROM temp_test1 a LEFT OUTER JOIN temp_test2 b ON a.seq = b.seq AND b.seq = 144 ; SELECT * FROM temp_test1 a , temp_test2 b WHERE a.seq = b.seq(+) AND b.seq(+) = 144 ; -- Test 2 -- 143 null 144 144 145 null -- Test 3 : Where 절 조건 -- SELECT * FROM temp_test1 a LEFT OUTER JOIN temp_test2 b ON a.seq = b.seq WHERE b.seq = 144 ; SELECT * FROM temp_test1 a , temp_test2 b WHERE a.seq = b.seq(+) AND b.seq = 144 ; -- Test 3 -- 144 144