문제
다음 SQL의 결과는?
SQLSELECT * FROM MEMBER WHERE STATUS NOT IN ('ACTIVE', 'PENDING', NULL);
① STATUS가 'ACTIVE', 'PENDING', NULL이 아닌 행들만 반환 ② STATUS가 'ACTIVE', 'PENDING'이 아닌 행들만 반환 (NULL 행 제외) ③ 모든 행이 반환됨 ④ 아무 행도 반환되지 않음
정답
4번
해설
NOT IN 절에 NULL이 포함되어 있으면, 어떤 값도 조건을 만족할 수 없다. NOT IN은 모든 값과 다르다는 조건인데, NULL과의 비교는 항상 UNKNOWN이 되어 전체 조건이 FALSE가 된다. ①②③은 모두 NOT IN에 NULL이 포함된 경우의 특수한 동작을 간과한 것이다.