LEFT JOIN 결과가 예상과 다를 때? 누락된 데이터의 진짜 원인
SQL에서 LEFT JOIN
은 왼쪽 테이블의 모든 데이터를 기준으로 오른쪽 테이블과 연결해주는 기능입니다. 하지만 실무에서는 종종 LEFT JOIN을 썼는데도 결과가 예상보다 적게 나오는 일이 발생합니다. 이 글에서는 그런 상황에서 확인해야 할 3가지 핵심 원인을 소개합니다.
1. WHERE 절 조건이 JOIN 결과를 제한한다
아래 쿼리를 살펴봅시다:
SELECT *
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id
WHERE d.location = 'SEOUL';
의도는 모든 직원 정보를 보고 싶은 것인데, 이 쿼리는 d.location
이 NULL인 직원(=부서가 없는 직원)은 제외됩니다. 이는 WHERE
절이 조인 이후에 적용되기 때문입니다.
→ 해결책은 조건을 JOIN
안에 넣는 것입니다:
SELECT *
FROM employees e
LEFT JOIN departments d ON e.dept_id = d.id AND d.location = 'SEOUL';
이렇게 하면 부서가 없는 직원도 빠지지 않습니다.
2. JOIN 조건이 누락되거나 잘못되었다
SELECT *
FROM employees e
LEFT JOIN departments d ON e.name = d.name;
이런 식으로 정확한 조인 조건 없이 컬럼 이름만 같은 걸 기준으로 조인하면 원하지 않는 결과가 나옵니다. 항상 기본키-외래키 관계 또는 고유한 값을 기준으로 조인해야 합니다.
3. 중첩 JOIN과 서브쿼리에서 발생하는 필터링
복잡한 쿼리일수록 LEFT JOIN
이 서브쿼리 내부에 있거나 INNER JOIN
과 함께 쓰이면서 무의식적으로 결과가 줄어들 수 있습니다. 쿼리 구조를 항상 시각화하면서 데이터 흐름을 따져보는 습관이 필요합니다.
LEFT JOIN
은 단순한 듯 보여도 실무에서는 자주 함정에 빠지는 구간입니다. 특히 WHERE
절의 위치나 조인 조건에 따라 결과가 확 달라질 수 있으니 항상 주의 깊게 쿼리를 작성해야 합니다.
#SQL #JOIN #LEFTJOIN #외부조인 #누락 #쿼리디버깅 #기초정리 #실무팁
'SQL 기초 정리' 카테고리의 다른 글
DISTINCT vs GROUP BY – 결과는 같아도 목적은 다르다 (0) | 2025.04.11 |
---|---|
WHERE 절과 HAVING 절, 헷갈리는 이유와 실무 기준 정리 (0) | 2025.04.11 |
SELECT *를 쓰면 왜 안 좋을까? 실무에서 컬럼을 명시하는 이유 (0) | 2025.04.10 |
NULL은 0이 아니다! SQL에서 NULL이 가진 의미와 주의점 (0) | 2025.04.10 |
WHERE 절 조건의 순서가 성능에 영향을 줄까? (0) | 2025.04.10 |