[SQL] = NULL 비교가 실패하는 이유

Unit·2025년 3월 23일

SQL

목록 보기
1/59

SQL에서 쿼리를 짜다 보면, NULL 값과 비교할 일이 꽤 많습니다.
그런데 아래처럼 작성했을 때, 결과가 전혀 나오지 않았던 적 있지 않나요?

-- ❌
SELECT *
FROM users
WHERE deleted_at = NULL;

처음에는 문법 오류가 아니라서 문제를 눈치채지 못하기도 합니다.
그런데 결과가 비어 있는 걸 보면 이상하다는 느낌이 들죠.


왜 안 되는 걸까요?

SQL에서 NULL은 "값이 없다"는 상태를 의미합니다.
즉, NULL은 어떤 값과도 같지 않으며, 자체적으로 비교할 수 없는 값이에요.

그래서 = NULL, <> NULL 같은 연산은 항상 결과가 UNKNOWN이 되고,
WHERE 절에서 필터링이 되지 않습니다.


올바른 비교 방법: IS NULL / IS NOT NULL

-- ✅
SELECT *
FROM users
WHERE deleted_at IS NULL;

마찬가지로, NULL이 아닌 값을 찾고 싶다면 IS NOT NULL을 사용해야 해요.

-- ✅
SELECT *
FROM users
WHERE deleted_at IS NOT NULL;

정리

✔️ NULL은 값이 없음을 의미하는 상태입니다.
✔️ = NULL은 작동하지 않고, 반드시 IS NULL / IS NOT NULL을 사용해야 합니다.
✔️ WHERE 절뿐 아니라, 모든 조건문에서 동일하게 적용됩니다.


이제 = NULL을 쓰는 실수는 없겠죠?
사소해 보여도, NULL 비교 실수는 결과를 완전히 바꿔놓을 수 있습니다.

profile
협업, 유지보수, 최적화를 고려한 데이터 실무 팁을 정리합니다.

0개의 댓글