TIL/용어

[TIL] SQL 에서의 NULL

아람2 2025. 6. 19. 18:52
반응형

프로그래밍 언어에서 NULL or None 은 아래와 같은 의미로 사용된다 

언어 표현 의미
Python None 값이 없음 
C NULL 포인터가 가리키는 대상이 없음 
Java null 객체가 존재하지 않음 
JavaScript null 의도적으로 비어 있는 값 

 

SQL 에서도 NULL 은 이와 유사하게 값이 없다 undefined 또는 알 수 없다 unknown 는 의미를 가지지만  

SQL 의 NULL 은 다르게 동작하는 중요한 차이점이 하나 있다 

 

⚠️ SQL 에서는 NULL 을 일반적인 값처럼 비교할 수 없다 

예를 들어 Python 에서는 None 끼리 직접 비교가 가능하다 

a = None
print(a == None)  # 출력: True

 

하지만 SQL 에서는 아래처럼 비교할 경우, 절대 원하는 결과가 나오지 않는다

SELECT * FROM table WHERE col = NULL;  -- ❌ 결과 없음

 

SQL 에서는 NULL = NULL 조차도 TRUE 가 아닌, UNKNOWN 으로 평가되기 때문이다 

 

즉, SQL 에서의 NULL 은 기본적인 비교 연산자 (=, !=, <, >) 로는 절대 비교할 수 없다 

 

✅ SQL 에서 NULL 을 비교하는 올바른 방법 

1. SQL 표준 방식

SELECT * FROM table WHERE col IS NULL;

 

SQL 표준에서는 IS NULL 을 사용해 NULL 값을 비교한다 

col 값이 NULL 인 행만 필터링한다 

2. MySQL 전용 방식: <=> (NULL-safe Equal)

SELECT NULL = NULL;     -- 결과: NULL (비교 불가)
SELECT NULL <=> NULL;   -- 결과: TRUE (정확히 비교됨)

 

<=>MySQL에서만 제공되는 특수한 비교 연산자로, NULL 값을 정확하게 비교할 수 있는 유일한 방법이다 

일반적인 비교 연산자 = 를 사용할 경우 NULL = NULL 은 UNKNOWN 으로 평가되어 결과가 나오지 않지만 

<=> 을 사용하면 NULL 값끼리도 동등한 값으로 인식하여 비교가 가능하다 

SELECT * FROM table WHERE col <=> NULL;

col 에 NULL 이 있는 행을 찾고 싶을 때는 이렇게 사용하면 된다 

 

NULL 비교 방식 정리

비교 방식 설명  결과 
col = NULL ❌ SQL 표준에서 비교 불가  오류 없음, 결과 없음 
col IS NULL ✅ SQL 표준, 가장 일반적인 방식  col 이 NULL 인 행 조회 
col <=> NULL ✅ MySQL 전용 연산자 (NULL-safe Equal) col 이 NULL 인 행 조회 

 

 

마무리 Tip

  • 표준 SQL 을 사용하는 경우에는 IS NULL, IS NOT NULL 을 사용하면 된다 
  • MySQL 을 쓴다면 <=> 도 적극적으로 활용하면 좋다 
    특히 동적 비교나 조건문에서 NULL 이 변수로 들어올 수 있는 경우 유용하다 
반응형

'TIL > 용어' 카테고리의 다른 글

[TIL] Auto Scaling 개념과 SLA 간단 정리  (4) 2025.07.02
[TIL] 딥러닝과 스마트 인프라  (0) 2025.06.26
[TIL] Delete/ Truncate/ Drop 차이 w/ MySQL  (1) 2025.06.18
[TIL] False Positive/ False Negative  (1) 2025.06.17
Servlet 서블릿  (1) 2025.02.13