매칭되는 오른쪽 행이 없어도 왼쪽 행은 남아야 하고, 오른쪽 컬럼만 NULL이 됩니다. 이 기준 하나로 흔한 실수를 빠르게 찾을 수 있습니다.
LEFT JOIN 결과 행 수가 왼쪽 테이블보다 줄어들었다면, 보통 WHERE나 다음 조인이 보존 행을 다시 삭제한 것입니다.
WHERE r.status = 'Y'
NULL 행이 WHERE에서 탈락합니다.
없는 오른쪽 행을 가진 왼쪽 행이 사라집니다.
ON ... AND r.status = 'Y'
오른쪽 매칭 조건으로 두면 왼쪽 보존이 유지됩니다.
COUNT(*), NOT IN
NULL을 포함한 행까지 일반 값처럼 해석합니다.
매칭 실패와 실제 값이 섞입니다.
COUNT(r.id), NOT EXISTS
오른쪽 실제 매칭 여부만 기준으로 삼습니다.
NATURAL JOIN
같은 이름의 컬럼이 생기면 조건이 자동으로 늘어납니다.
보존 방향과 키가 SQL에 드러나지 않습니다.
LEFT JOIN ... ON l.key = r.key
붙이는 기준과 보존 방향을 한 줄에서 확인합니다.