WHERE가 OUTER 행을 지우는 순간

LEFT JOIN 직후에는 3행이지만, WHERE는 TRUE인 1행만 최종 결과에 남깁니다.

조인 자체는 왼쪽 사용자를 모두 보존합니다. 하지만 오른쪽 테이블 값으로 WHERE 를 검사하면 NULL = 'DELIVERED' 가 TRUE가 아니므로 NULL 확장 행이 제거됩니다.

평가되는 조건
WHERE o.status = 'DELIVERED'

핵심 규칙: WHERE 절은 TRUE만 통과시킵니다. NULL 비교 결과인 UNKNOWN 은 남지 않습니다.

1. LEFT JOIN 직후
2. WHERE 평가
3. 최종 결과
김철수 order_id = 1, status = 'DELIVERED'
오른쪽 값이 있고 조건과 일치
TRUE
조건을 만족하므로 통과
남음
결과 집합에 유지
이영희 order_id = NULL, status = NULL
주문이 없어도 LEFT JOIN이라 한 번은 생성됨
UNKNOWN
NULL 비교라 TRUE가 아님
제거
WHERE 단계에서 탈락
박민수 order_id = NULL, status = NULL
보존 대상은 맞지만 오른쪽 조건은 통과하지 못함
UNKNOWN
NULL 행도 예외 없이 걸러짐
제거
결과가 INNER JOIN처럼 좁아짐
기억할 규칙: 오른쪽 테이블을 걸러도 왼쪽 행을 살려야 하면 조건을 ON 절에 두고, NULL 확장 행까지 제거해도 되는 경우에만 WHERE 로 보냅니다.