호테의 노트에 오신 것을 환영합니다 🙌

Tableau와 Salesforce, Python과 SQL 등 데이터의 전반적인 것들을 다루는 기술 블로그입니다.

SQL

명시적 조인 vs 비명시적 조인

Hote's Note 2025. 5. 6. 15:49

SQL에서 두 개 이상의 테이블을 조인할 때, 우리는 명시적 조인(explicit join)비명시적 조인(implicit join) 두 가지 방식 중 하나를 선택할 수 있습니다. 이번 글에서는 이 두 방식의 차이와, 예제를 통해 어떻게 전환하는지도 함께 정리해보겠습니다.

 

1.  명시적 조인 (Explicit Join)

명시적 조인은 SQL 표준(ANSI SQL-92 이후)에서 권장하는 방식으로, INNER JOIN ... ON 형태로 조인 조건을 명확하게 기술합니다. 가독성이 좋고, 조인 조건이 명확하게 구분되기 때문에 유지보수에도 유리합니다.

-- 명시적 조인 예제
SELECT t1.shop_id, t1.shop_nm, t1.shop_size,
       t2.ord_no, t2.ord_dtm, t2.shop_id, t2.ord_amt
FROM startdbmy.ms_shop t1
INNER JOIN startdbmy.tr_ord t2
  ON t2.shop_id = t1.shop_id
WHERE t2.shop_id = 'S271'
  AND t2.ord_dtm >= STR_TO_DATE('20230302','%Y%m%d')
  AND t2.ord_dtm < STR_TO_DATE('20230303','%Y%m%d');

 

2.비명시적 조인 (Implicit Join)

비명시적 조인은 초기 SQL 표준(SQL-89)에서 사용되던 방식으로, JOIN 키워드를 쓰지 않고 단순히 FROM 절에서 콤마(,)로 테이블을 나열한 뒤, WHERE 절에서 조인 조건을 작성합니다.

Oracle과 같이 오래된 시스템에서는 여전히 이 방식을 자주 볼 수 있으며, 일부 상황에서는 성능상의 이점이 있을 수도 있습니다.

-- 비명시적 조인 예제
SELECT t1.shop_id, t1.shop_nm, t1.shop_size,
       t2.ord_no, t2.ord_dtm, t2.shop_id, t2.ord_amt
FROM startdbmy.ms_shop t1, startdbmy.tr_ord t2
WHERE t2.shop_id = 'S271'
  AND t2.ord_dtm >= STR_TO_DATE('20230302','%Y%m%d')
  AND t2.ord_dtm < STR_TO_DATE('20230303','%Y%m%d')
  AND t2.shop_id = t1.shop_id;

 

3. 전환 규칙 요약

명시적 조인을 비명시적 조인으로 바꾸려면 아래 두 가지를 기억하세요:

  1. INNER JOIN 구문을 제거하고, FROM 절에서 테이블을 콤마(,)로 나열합니다.
  2. ON 절을 제거하고 그 안에 있던 조건을 WHERE 절에 추가합니다.

 

4.  명시적 조인 vs  비명시적 조인 비교

항목 명시적 조인 비명시적 조인
가독성 ✅ 좋음 ❌ 떨어짐
유지보수 ✅ 유리 ❌ 불리
표준 준수 ✅ ANSI SQL ❌ 오래된 방식
실무 사용 빈도 ✅ 높음 ⚠ Oracle 등 일부 사용