SQL의 join에서 on 절과 where 절의 차이점은 join 하는 범위 및 결과가 다르다.
예시로 아래 m_user, m_right 2개의 테이블이 있다.
Table 1 - m_user
Table 2 - m_right
보면 겹치는 내용이 right_seq, site_code 2개 컬럼이 있다.
1. LEFT OUTER JOIN, ON 절에 AND 연산 조건
// LEFT OUTER JOIN, ON 절에 AND 연산 조건 select mu.u_id, mu.u_email, mr.right_seq, mr.site_code from m_user mu LEFT OUTER JOIN m_right mr ON mu.site_code = mr.site_code AND mr.right_seq = 2;
위 내용을 보면 LEFT JOIN ON절에 AND 연산을 써서 right_seq에 조건을 줬다.
결과
LEFT JOIN 이기 때문에 m_user 기준으로 site_code 가 같은것 중 right_seq = 2인것은 데이터가 나오지만
나머지는 null값으로 보여진다.
간단하게 얘기하면 LEFT JOIN을 하면서 조건을 주기 때문에 없는 데이터도 결과값에 나온다.
2. LEFT OUTER JOIN 과 WHERE 조건절
select mu.u_id, mu.u_email, mr.right_seq, mr.site_code from m_user mu LEFT OUTER JOIN m_right mr ON mu.site_code = mr.site_code WHERE mr.right_seq = 2;
결과
JOIN ON 절에 AND 조건을 줬던것과 결과가 다르다.
LEFT JOIN을 하고 난 후 WHERE 절을 통해 조건을 주기 때문에 right_seq 2인 친구만 결과값에 나온다.
즉, LEFT OUTER JOIN 의 ON 절에 AND 연산을 통해 조건을 줬을 경우 LEFT JOIN을 하면서 조건이 들어가기 때문에
없는 데이터 ROW도 NULL을 통해 결과 값에 나온다. 하지만 WHERE 절은 LEFT OUTER JOIN을 하고 난 결과값에