JOIN 체크리스트

JOIN은 “어떻게 연결할지”와 “무엇을 남길지”를 분리해서 써야 안전합니다.

조인 자체보다 실수는 조건 누락, 모호한 컬럼, 예상보다 늘어난 결과 행에서 자주 발생합니다.

1

조인 조건을 빠뜨리지 않는다

조건이 없으면 모든 행 조합이 만들어져 결과가 폭발합니다.

JOIN orders o
  ON u.user_id = o.user_id
2

ON과 WHERE의 역할을 나눈다

INNER JOIN에서는 결과가 같아 보일 수 있지만, OUTER JOIN으로 가면 의미가 달라집니다.

ON u.user_id = o.user_id
WHERE o.status = 'PAID'
3

같은 컬럼명은 별칭으로 구분한다

양쪽 테이블에 user_id, created_at 같은 이름이 있으면 어느 테이블 컬럼인지 밝혀야 합니다.

SELECT u.user_id, o.order_id
4

1:N 조인은 행이 늘어날 수 있다

회원 1명에 주문 3건이 있으면 JOIN 결과에는 그 회원이 3번 나타납니다.

users 1행 + orders 3행
→ 결과 3행
5

필요 컬럼만 선택한다

SELECT *는 중복 컬럼, 전송량, API 응답 형태 충돌을 만들기 쉽습니다.

SELECT u.username, o.status
6

실행 계획과 인덱스를 확인한다

대량 테이블에서는 조인 컬럼 인덱스와 읽은 행 수를 함께 확인합니다.

EXPLAIN SELECT ... JOIN ...
정확성

ON 조건이 결과의 의미를 결정합니다.

가독성

별칭은 짧게 쓰되 일관되게 유지합니다.

성능

인덱스는 실제 쿼리 패턴과 실행 계획으로 판단합니다.