JOIN 문법 선택

명시적 JOIN은 연결 조건을 ON에 드러내서 실수를 줄입니다.

암시적 조인도 같은 결과를 만들 수 있지만, 테이블 나열과 조건이 떨어져 있어 조건 누락을 놓치기 쉽습니다.

명시적 JOIN

관계가 문장 안에 보임

SELECT u.username, o.order_id
FROM users u
INNER JOIN orders o
  ON u.user_id = o.user_id;
의도users와 orders를 user_id로 연결한다는 뜻이 바로 보입니다.
필터주문 상태 같은 결과 조건은 WHERE에 따로 둘 수 있습니다.
확장OUTER JOIN으로 넘어가도 ON/WHERE 의미를 유지하기 쉽습니다.
암시적 JOIN

조건이 WHERE에 섞임

SELECT u.username, o.order_id
FROM users u, orders o
WHERE u.user_id = o.user_id;
동작조건이 있으면 INNER JOIN과 같은 결과가 될 수 있습니다.
위험WHERE 조건이 많아질수록 조인 조건과 필터가 섞입니다.
누락조인 조건을 빼면 모든 행 조합이 만들어집니다.
조건 있음

3명 × 주문 중 일치 행만 결과에 남습니다.

조건 없음

3명 × 4주문 = 12행처럼 모든 조합이 생깁니다.

결론

JOIN ... ON으로 연결 규칙을 SQL에 고정합니다.