SQLD
2과목
8
업데이트 2026.08.08

SQL NULL 완전 정리: COUNT·비교 연산·NVL에서 틀리지 않는 법

SQLD에서 반복되는 NULL 비교, 3값 논리, COUNT와 집계 함수, NVL·COALESCE의 평가 순서를 예제로 설명합니다.

이 글의 핵심

NULL은 숫자 0이나 빈 문자열이 아니라 값이 알려지지 않았음을 나타냅니다.

NULL과 일반 비교 연산을 하면 TRUE가 아니라 UNKNOWN이 됩니다.

집계 함수는 대체로 NULL을 제외하지만 COUNT(*)는 행 자체를 셉니다.

NULL은 값이 아니라 상태다

NULL은 아직 입력되지 않았거나 적용되지 않아 값을 알 수 없다는 상태를 표현합니다. 따라서 NULL = NULL도 참이라고 단정할 수 없습니다. 두 값이 모두 알려지지 않았다는 사실만 같을 뿐 실제 값이 같은지는 알 수 없기 때문입니다.

NULL 여부는 = NULL이나 <> NULL이 아니라 IS NULL, IS NOT NULL로 검사합니다.

올바른 NULL 검사
SELECT employee_id
FROM employees
WHERE manager_id IS NULL;

WHERE는 TRUE인 행만 남긴다

SQL 조건식의 결과는 TRUE, FALSE, UNKNOWN 세 가지가 될 수 있습니다. WHERE 절은 TRUE인 행만 통과시키므로 FALSE뿐 아니라 UNKNOWN도 제거됩니다.

예를 들어 salary + bonus >= 5000에서 bonus가 NULL이면 덧셈 결과가 NULL이고 비교 결과는 UNKNOWN입니다. 보너스가 없는 직원을 0으로 계산하려면 먼저 NULL을 0으로 바꿔야 합니다.

NULL을 0으로 대체한 계산
SELECT employee_id, salary + COALESCE(bonus, 0) AS total_pay
FROM employees;

집계 함수가 NULL을 처리하는 방식

SUM, AVG, MIN, MAX와 열을 인수로 받은 COUNT는 NULL을 제외하고 계산합니다. 반면 COUNT(*)는 특정 열의 값이 아니라 결과 집합의 행 수를 셉니다.

AVG(score)와 AVG(COALESCE(score, 0))는 다른 결과입니다. 전자는 미응시자처럼 score가 NULL인 행을 분모에서 제외하고, 후자는 해당 행을 0점으로 포함합니다.

표현식NULL 처리주의점
COUNT(*)행을 포함NULL이 있는 행도 계산
COUNT(column)NULL 제외열마다 결과가 달라질 수 있음
AVG(column)NULL 제외분모에서도 제외
AVG(COALESCE(column, 0))0으로 포함평균이 낮아질 수 있음

NOT IN과 NULL의 위험

NOT IN의 목록이나 서브쿼리 결과에 NULL이 하나라도 있으면 각 비교가 UNKNOWN과 결합되어 기대한 행이 나오지 않을 수 있습니다. 제외 조건을 만들 때는 서브쿼리의 NULL을 제거하거나 NOT EXISTS로 관계를 표현하는 방법을 검토합니다.

NULL 영향이 적은 제외 조건
SELECT c.customer_id
FROM customers c
WHERE NOT EXISTS (
  SELECT 1
  FROM orders o
  WHERE o.customer_id = c.customer_id
);

NULL 문제 풀이 순서

계산식에 NULL이 들어가는 지점을 먼저 찾고, 대체 함수가 적용되는 시점을 확인하세요. 그다음 조건식 결과가 TRUE인지 UNKNOWN인지 판단하고 마지막으로 집계 함수의 인수에 NULL이 남는지 확인합니다.

NULL을 보자마자 0으로 바꾸지 마세요. 문제의 업무 의미가 “값 없음”인지 “0”인지에 따라 결과가 달라집니다.


자주 묻는 질문

NULL과 빈 문자열은 항상 다른가요?

표준적인 개념에서는 다르지만 Oracle은 길이가 0인 문자열을 NULL로 처리하는 등 DBMS 차이가 있습니다. 문제에서 전제한 DBMS를 확인하세요.

COALESCE는 무엇을 반환하나요?

인수를 왼쪽부터 확인해 처음 만나는 NULL이 아닌 값을 반환합니다. 여러 단계의 대체값을 표현할 때 유용합니다.

시험 과목과 합격 기준은 KDATA SQL 개발자 공식 안내를 기준으로 확인했습니다. 가풀은 시험 주관기관의 공식 서비스가 아니며, 일정과 규정은 접수 전 공식 공고를 다시 확인해야 합니다.

2과목

SQL JOIN 완전 정리: INNER·OUTER·SELF JOIN 결과 읽는 법

읽기
2과목

GROUP BY와 HAVING 차이: SQLD 집계 문제 실수 줄이기

읽기
2과목

SQL 윈도우 함수 정리: RANK·ROW_NUMBER·누적합 한 번에 이해하기

읽기