서브쿼리중급
EXISTS
서브쿼리 결과에 행이 하나라도 있으면 TRUE
정의
왜 중요한가?
"존재 여부만 확인" 할 때 IN 대신 EXISTS를 쓰면 Semi Join으로 풀려 첫 매칭에서 종료할 수 있다. NOT IN 자리에는 NULL 안전성을 위해 NOT EXISTS를 쓰는 것이 안전하다.
틀리기 쉬운 포인트
예시
SELECT c.id, c.name FROM customers c WHERE EXISTS ( SELECT 1 FROM orders o WHERE o.customer_id = c.id );
성능 포인트
!EXISTS는 Semi Join으로 풀려 첫 매칭에서 종료. NOT IN은 NULL 처리 의미 차이로 안티 조인 최적화가 막힐 수 있어 NOT EXISTS 권장.