Core Rule

ON과 WHERE의 위치 차이

ON은 조인할 때 적용되고, WHERE는 조인이 끝난 뒤 전체 결과를 다시 거릅니다.

ON: 매칭 조건
NULL 보존
WHERE: 최종 필터
ON 조건상대 행을 붙일지 결정합니다. 그래도 LEFT JOIN의 왼쪽 행 자체는 보존됩니다.
NULL 채움ON에 맞는 상대 행이 없으면 오른쪽 컬럼을 NULL로 채워 보존 행을 완성합니다.
WHERE 조건완성된 결과 행을 필터링합니다. 오른쪽 NULL 행도 여기서 제거될 수 있습니다.
조건을 ON에

회원은 모두 보존

배송 완료 주문만 붙이고, 없으면 주문 컬럼만 NULL입니다.

조건을 WHERE에

NULL 행 제거

o.status = 'DELIVERED'가 NULL 행을 탈락시켜 INNER JOIN처럼 보일 수 있습니다.