SQL에서 NULL 비교 시, = NULL이 아닌 IS NULL, IS NOT NULL을 사용해야 합니다. 일반적인 프로그래밍 언어의 NULL 비교문(= NULL)과 다르다는 것은 프로그래밍 언어와 SQL의 NULL 비교 연산이 다르다는 것을 의미합니다.
이 글은 프로그래밍 언어(C, Java)와 SQL에서 NULL 비교가 어떻게 다른지를 설명합니다.
NULL 비교대부분 프로그래밍 언어는 TRUE, FALSE의 값을 가지는 2값 논리를 사용합니다. 따라서 비교 연산 시 TRUE, FALSE 두 값만 결과로 확인할 수 있습니다.
C에서 NULL은 0인 주소값을 의미합니다. 따라서 NULL을 가진 값과 0을 비교 연산하면 TRUE가 나옵니다.

Java에서 null은 참조 객체가 어떤 객체나 메모리 주소도 가리키지 않음을 의미합니다.
The Java Virtual Machine does not mandate a concrete value for null.
JVM Spec에 따르면 JVM은 null에 구체적인 값을 요구하지 않는다고 합니다. null이 어떤 값을 가지는지 모르고, 자바는 비교 시 타입 체크에 매우 엄격하므로 C처럼 특정 값과 null을 비교할 수 없습니다.

NULL 비교SQL에서 NULL은 데이터 값이 없다는 것을 의미하는 키워드입니다. 데이터베이스에서 값이 존재하지 않는다는 사실은 굉장히 중요합니다. 이 요구사항을 만족시키기 위해 NULL이 정의되었습니다.
SQL은 NULL을 처리하기 위해 TRUE, FALSE, UNKNOWN을 가지는 3가 논리(three-valued logic)를 사용합니다. NULL과 특정값을 비교하면 항상 UNKNOWN이 나와, 개발자가 NULL과 관련된 연산이라는 것을 알 수 있습니다. 이렇게 하면 실수로 NULL을 잘못 처리하는 것을 방지할 수 있습니다.
Null == {특정값} 의 결과가 UNKNOWN 이기 때문에, TRUE, FALSE를 기반으로 하는 논리 연산에서 이 구문을 사용할 수 없습니다. 따라서 특정 데이터가 NULL인지를 TRUE, FALSE로 반환하는 비교문이 필요합니다. 이것이 바로 IS NULL, IS NOT NULL입니다.
SQL spec 문서(SQL-92)에 따르면 TRUE, FALSE를 반환하는 NULL 비교 구문은 다음과 같습니다.
<null predicate> ::= <row value constructor> IS [ NOT ] NULL
프로그래밍 언어(C, Java)의 NULL 비교
프로그래밍 언어는 TRUE, FALSE 논리 연산을 사용하므로 NULL 비교 시 TRUE, FALSE 결과만 나옴.
SQL의 NULL
데이터 값이 없다는 것을 의미하는 키워드
SQL의 NULL 비교
SQL은 3가 논리(TRUE, FALSE, UNKNOWN)을 사용하는데,
NULL == {특정값}은 UNKNOWN이므로,
NULL 비교 시 TRUE, FALSE를 반환하기 위해IS [NOT] NULL정의
정리하신 글 잘 읽었습니다. 차근차근 설명해 주셔서 이해가 잘 되네요. 감사합니다!