문제
다음 중 NOT EXISTS를 NOT IN으로 변환할 때 주의사항으로 가장 적절한 것은?
SQL-- 원본 쿼리 SELECT 고객번호 FROM 고객 A WHERE NOT EXISTS ( SELECT 1 FROM 주문 B WHERE A.고객번호 = B.고객번호 AND B.주문상태 = '취소' );
① NOT IN으로 변환 시 연결조건을 생략해도 동일한 결과를 얻는다 ② NOT IN 서브쿼리에 NULL이 포함되면 예상과 다른 결과가 나올 수 있다 ③ NOT EXISTS와 NOT IN은 항상 동일한 성능을 보인다 ④ NOT IN 변환 시 DISTINCT를 반드시 사용해야 한다
정답
2번
해설
NOT IN 연산에서 서브쿼리 결과에 NULL이 포함되면, 3-valued logic에 의해 전체 결과가 UNKNOWN이 되어 아무 행도 반환되지 않을 수 있습니다. 반면 NOT EXISTS는 NULL 값의 영향을 받지 않습니다. 따라서 NOT EXISTS를 NOT IN으로 바꿀 때는 NULL 여부를 반드시 고려해야 합니다.