SQL: = NULL 이 아닌 IS NULL인 이유

박민지·2023년 8월 10일
0

RDBMS

목록 보기
1/2

개요

SQL에서 NULL 비교 시, = NULL이 아닌 IS NULL, IS NOT NULL을 사용해야 합니다. 일반적인 프로그래밍 언어의 NULL 비교문(= NULL)과 다르다는 것은 프로그래밍 언어와 SQL의 NULL 비교 연산이 다르다는 것을 의미합니다.

이 글은 프로그래밍 언어(C, Java)와 SQL에서 NULL 비교가 어떻게 다른지를 설명합니다.


프로그래밍 언어(C, Java)의 NULL 비교

대부분 프로그래밍 언어는 TRUE, FALSE의 값을 가지는 2값 논리를 사용합니다. 따라서 비교 연산 시 TRUE, FALSE 두 값만 결과로 확인할 수 있습니다.

C에서 NULL0인 주소값을 의미합니다. 따라서 NULL을 가진 값과 0을 비교 연산하면 TRUE가 나옵니다.

Java에서 null참조 객체가 어떤 객체나 메모리 주소도 가리키지 않음을 의미합니다.

The Java Virtual Machine does not mandate a concrete value for null.

JVM Spec에 따르면 JVM은 null에 구체적인 값을 요구하지 않는다고 합니다. null이 어떤 값을 가지는지 모르고, 자바는 비교 시 타입 체크에 매우 엄격하므로 C처럼 특정 값과 null을 비교할 수 없습니다.


SQL의 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 정의

References


1개의 댓글

comment-user-thumbnail
2024년 5월 18일

정리하신 글 잘 읽었습니다. 차근차근 설명해 주셔서 이해가 잘 되네요. 감사합니다!

답글 달기