5. 자주 하는 실수 (Tip)
실수 1: "없는 것"을 찾을 때 습관적으로 NOT IN 을 쓴다
NOT IN 은 서브쿼리 컬럼에 NULL 이 없다고 100% 확신할 때만 씁니다. 대부분의 코드베이스는 시간이 지나며 데이터가 바뀌므로, 처음부터 NOT EXISTS 를 기본값으로 삼는 편이 안전합니다.
실수 2: NULL 이 하나만 섞인 결과를 "데이터가 없나 보다"로 넘긴다
NOT IN 이 예상보다 적게, 특히 0행이 나오면 먼저 서브쿼리 결과에 NULL 이 있는지 확인합니다. SELECT COUNT(*) FROM orders WHERE emp_id IS NULL 처럼 간단한 확인 쿼리 하나면 원인을 바로 찾을 수 있습니다.
실수 3: EXISTS 서브쿼리에 상관 조건을 빠뜨린다
WHERE EXISTS (SELECT 1 FROM orders) 처럼 바깥 쿼리와 연결하는 조건(o.emp_id = e.id)을 빠뜨리면, orders 테이블에 한 행이라도 있으면 모든 직원이 참이 됩니다. EXISTS 서브쿼리는 거의 항상 상관 조건이 있어야 의미가 있습니다.
실수 4: Oracle 에서 빈 문자열을 "값 없음" 표시로 쓴다
Oracle 계열에서 '' 는 NULL 과 같습니다. "선택 안 함"을 표현하려고 빈 문자열을 넣으면 NULL 을 넣은 것과 똑같이 동작하고, NOT IN·집계 함수 등에서 NULL 과 같은 함정을 일으킵니다.