비교의 핵심

겉보기 빈칸이 같아 보여도 DB의 상태는 다릅니다

0과 ''는 이미 정해진 값이지만, NULL은 값이 없는 게 아니라 아직 알 수 없는 상태를 뜻합니다.

같은 질문을 던졌을 때 어디서 갈라질까?

값이 확정된 칸은 비교가 끝나지만, NULL은 애초에 내용을 모르므로 결과도 바로 참/거짓으로 닫히지 않습니다.

숫자 값
0

값이 있는 0점

시험 결과가 확정됐고, 그 결과가 0이라는 뜻입니다.

DB가 아는 상태 무엇이 저장됐는지 알고 있음
같은 값과 비교
0 = 0
TRUE
문자 값
''

내용이 비어 있는 문자열

문자 데이터에서는 길이가 0인 문자열이라는 구체적인 값입니다.

DB가 아는 상태 비어 있다는 사실까지 포함해 값이 확정됨
같은 값과 비교
'' = ''
TRUE
미확정 상태
NULL

값을 아직 알 수 없음

아직 입력되지 않았거나, 해당 값이 없어서 내용을 판단할 수 없습니다.

DB가 아는 상태 값의 존재 여부 자체가 확정되지 않음
같은 값과 비교
NULL = NULL
Unknown
왜 문제인가

NULL만 비교의 출발점이 불확실하므로 이후 식에서도 3값 논리가 생깁니다. 그래서 NULL = NULL은 참이 아니고, 존재 여부를 확인할 때는 IS NULL을 사용합니다.