NULL은 0도 빈 문자열도 false도 아니야
NULL은 값이 없거나 아직 모른다는 별도 상태야. 5가 아니며 0도 아니고, 입력하지 않은 문자열을 뜻하지도 않아. 따라서 5 + NULL과 'hi' || NULL의 결과도 NULL이 돼.
비교에는 세 번째 결과가 생겨
NULL = NULL은 참이 아니라 알 수 없음이야. 그래서 IS NULL과 IS NOT NULL을 써야 하고 = NULL로 찾으면 안 돼. 이 세 값 논리는 WHERE에서 조용히 행을 제외할 수 있으므로 스키마에서부터 NULL의 뜻을 좁혀야 해.
기본은 NOT NULL
반드시 있어야 하는 값이라면 NOT NULL로 선언해. 예를 들어 평점이 0인지, 5인지, 아직 매기지 않았는지는 서로 다른 상태야. 평균 같은 집계가 NULL을 건너뛴다는 점도 기억해야 해. 의미 있는 “모름”이 필요할 때만 빈자리를 허용해.
NULL까지 포함해 비교하려면
IS DISTINCT FROM과 IS NOT DISTINCT FROM은 NULL을 보통 값처럼 다뤄. 후자는 NULL = NULL을 TRUE로 판단해. 하위 질의에 NULL이 섞일 수 있는 WHERE id NOT IN (SELECT id FROM other) 대신 NOT EXISTS를 쓰면 예상 밖의 3값 논리를 피할 수 있어.