[SQL] JOIN은 되는데 이상하다면: 조인 키 타입 불일치

Unit·2025년 12월 21일

SQL

목록 보기
51/59

MySQL에서 JOIN 쿼리를 작성했을 때 에러 없이 결과는 나오는데,

  • 건수가 미묘하게 다르거나
  • 성능이 느린 것처럼 느껴질 때
    가 있습니다.

이때 원인으로 생각해볼 수 있는 것이 조인 키 타입 불일치입니다.


👁️ 흔한 구조

    users.user_id   -- VARCHAR
    orders.user_id  -- INT
SELECT *
FROM users u
INNER JOIN orders o
  ON u.user_id = o.user_id;

문법상 문제는 없고, 실제로도 결과는 나옵니다.
그래서 문제를 바로 인지하기 어렵습니다.


🧐 MySQL은 조용히 형변환을 합니다

문자열과 숫자를 비교하면
MySQL은 한쪽을 암묵적으로 형변환합니다.

  • '00123' → 123
  • '123abc' → 123
  • 'abc' → 0

값이 같아서 JOIN된 것이 아니라,
암묵적 형변환에 의해 비교된 결과에 가깝습니다.

이 과정에서

  • 의도하지 않은 매칭이 발생하거나
  • 반대로 매칭돼야 할 데이터가 누락될 수 있습니다.

⚠️ 성능 측면에도 영향을 줄 수 있습니다

조인 키 중 한쪽에서 형변환이 발생하면
해당 컬럼의 인덱스는 사용되지 않습니다.

EXPLAIN
SELECT *
FROM users u
INNER JOIN orders o
  ON u.user_id = o.user_id;

이 경우 인덱스가 있어도 Full Scan이 발생해 쿼리 성능에 영향을 줄 수 있습니다.


정리

✔️에러 없이 동작하는 JOIN이라도,
조인 키 타입이 다르면 예상과 다른 결과나 비효율이 발생할 수 있습니다.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글