MySQL은 문자열처럼 따옴표로 묶인 값과 숫자처럼 따옴표 없이 작성된 값을 서로 다른 비교 규칙으로 처리합니다. 그렇기 때문에 IN() 함수의 값 목록에 두 형식을 혼합하여 사용하면 일관성 없는 결과 집합이 반환될 수 있습니다.
피해야 할 쿼리 작성 방식
다음과 같이 숫자와 문자열을 뒤섞어 작성하는 것은 권장되지 않습니다.
Select Salary from employee where ID IN(1,'a',2,3,'c')
권장하는 쿼리 작성 방식
대신 아래와 같이 목록 안의 모든 값을 동일한 형식으로 통일하여 작성하는 것이 좋습니다.
Select Salary from employee where ID IN('1','a','2','3','c')혼합 사용을 피해야 하는 이유
MySQL은 비교 연산을 수행할 때 타입 변환(type conversion) 규칙에 따라 값을 처리합니다. 숫자와 문자열이 섞여 있으면 각 값을 어떤 타입으로 변환해 비교할지 결정하는 과정에서 예상치 못한 결과가 나올 수 있습니다. 또한 형식이 일관되지 않으면 인덱스를 효율적으로 활용하지 못해 쿼리 성능이 저하될 가능성도 있습니다.
따라서 IN() 함수의 값 목록은 가급적 동일한 데이터 타입으로 통일하는 것이 결과의 정확성과 쿼리 성능 모두에 안전합니다.