본문 바로가기
자격증 준비/SQLD

NULL이란 무엇인가: 0, 공백과 차이까지 쉽게 이해하기

by 코딩사무소장 2026. 3. 15.
반응형

NULL이란 무엇인가: 0, 공백과 차이까지 쉽게 이해하기

SQL을 공부하다 보면 NULL이라는 개념을 반드시 만나게 됩니다. 처음에는 값이 없는 거니까 0이나 공백과 비슷하다고 생각하기 쉽지만, 실제로는 전혀 다릅니다. 결론부터 말하면 NULL은 값이 없음을 나타내는 특별한 상태이고, 0은 숫자 값, 공백은 문자 값입니다. 이 글에서는 SQL 초보자와 SQLD 준비생이 헷갈리지 않도록 NULL의 의미, 0과 공백과의 차이, 비교 방법, 자주 하는 실수까지 한 번에 정리해보겠습니다.

이 글은 이런 분께 추천합니다
  • NULL이 정확히 무엇인지 헷갈리는 분
  • NULL과 0, 공백 차이를 확실히 정리하고 싶은 분
  • SQLD에서 NULL 관련 문제를 자주 틀리는 분
  • WHERE 조건에서 NULL 비교가 왜 안 되는지 궁금한 비전공자

NULL이란 무엇인가

NULL은 값이 없음을 나타내는 특별한 상태입니다.

여기서 중요한 점은 NULL이 단순히 빈칸이 아니라는 것입니다. NULL은 “아직 값이 입력되지 않음”, “값을 알 수 없음”, “해당 값이 존재하지 않음” 같은 의미를 가질 수 있습니다.

쉽게 말하면 NULL은 값이 0인 상태가 아니라, 값 자체가 없는 상태입니다.

왜 NULL이 중요한가

SQL에서는 NULL을 일반 값처럼 다루지 않기 때문에, 이 개념을 정확히 이해하지 못하면 조건문, 집계 함수, 비교 연산에서 자주 실수하게 됩니다.

  • WHERE에서 NULL 비교가 예상과 다르게 동작할 수 있다
  • COUNT, AVG 같은 집계 함수 결과가 달라질 수 있다
  • NULL 허용 여부가 데이터 모델링 품질에 영향을 준다
  • SQLD 문제에서 자주 나오는 핵심 포인트다

NULL과 0은 왜 다른가

0은 숫자입니다. 즉, 분명한 값이 존재합니다.

반면 NULL은 숫자가 아닙니다. 문자도 아니고, 공백도 아닙니다. 값 자체가 존재하지 않는 상태입니다.

표현 의미 예시
0 숫자 값이 있음 포인트 0점
'' 또는 공백 문자 값이 있음 빈 문자열
NULL 값 자체가 없음 아직 입력 안 된 퇴사일

예제로 보면 더 쉽게 이해된다

예를 들어 직원 테이블에 퇴사일 컬럼이 있다고 해보겠습니다.

직원ID | 이름   | 퇴사일
1      | 김철수 | NULL
2      | 이영희 | 2025-12-31

여기서 김철수의 퇴사일이 NULL이라는 것은 퇴사일이 0이거나 빈문자열이라는 뜻이 아닙니다. 단순히 현재 퇴사일 정보가 없다는 의미입니다.

NULL은 왜 = 로 비교하면 안 될까

초보자가 가장 많이 실수하는 부분입니다. NULL은 일반 값처럼 =<> 로 비교하지 않습니다.

SELECT *
FROM employees
WHERE resign_date = NULL;

이런 식으로 쓰면 보통 원하는 결과가 나오지 않습니다.

NULL은 일반 값이 아니라 특별한 상태이기 때문에, 비교할 때는 아래처럼 써야 합니다.

SELECT *
FROM employees
WHERE resign_date IS NULL;

반대로 NULL이 아닌 값을 찾고 싶다면 IS NOT NULL을 사용합니다.

SELECT *
FROM employees
WHERE resign_date IS NOT NULL;

집계 함수에서 NULL은 어떻게 처리될까

NULL은 집계 함수에서도 중요한 차이를 만듭니다.

예를 들어 아래처럼 bonus 컬럼에 NULL이 있다고 해보겠습니다.

직원ID | bonus
1      | 100
2      | NULL
3      | 200
  • COUNT(*) 는 전체 행 수를 센다
  • COUNT(bonus) 는 NULL이 아닌 bonus만 센다
  • AVG(bonus) 도 NULL을 제외하고 평균을 계산한다

즉, NULL은 집계 함수 계산에서 보통 제외된다고 먼저 기억하면 좋습니다.

데이터 모델링에서 NULL 허용은 왜 중요할까

모든 컬럼에 NULL을 허용하는 것이 좋은 설계는 아닙니다. 어떤 값은 반드시 있어야 하고, 어떤 값은 상황에 따라 없어도 될 수 있습니다.

  • 기본키는 보통 NULL이 허용되면 안 된다
  • 이름, 생성일 같은 핵심 정보도 보통 NULL이 부적절하다
  • 퇴사일, 배송완료일처럼 상황에 따라 비어 있을 수 있는 값은 NULL 허용 가능

즉, NULL 허용 여부는 단순 기술 설정이 아니라 업무 규칙과 연결된 설계 포인트입니다.

초보자가 자주 하는 실수

자주 하는 실수 1

NULL을 0이나 공백과 같은 의미로 생각하는 것

NULL은 값이 없는 상태이고, 0과 공백은 실제 값이 있는 상태입니다.

자주 하는 실수 2

WHERE 컬럼 = NULL 형태로 비교하는 것

NULL 비교는 IS NULL, IS NOT NULL 로 해야 합니다.

자주 하는 실수 3

COUNT(*)와 COUNT(컬럼)의 차이를 놓치는 것

NULL이 있는 컬럼에서는 COUNT 결과가 달라질 수 있으므로 반드시 구분해야 합니다.

비전공자는 이렇게 외우면 쉽다

  • 0 = 값이 있는 숫자
  • 공백 = 값이 있는 문자
  • NULL = 값 자체가 없음
  • NULL 비교는 = 가 아니라 IS NULL 로 한다고 기억하면 쉽습니다.

핵심 요약

  • NULL은 값이 없는 특별한 상태입니다.
  • 0이나 공백과는 전혀 다른 개념입니다.
  • NULL 비교는 = 이 아니라 IS NULL, IS NOT NULL을 사용해야 합니다.
  • COUNT, AVG 같은 집계 함수는 NULL을 제외하고 계산하는 경우가 많습니다.
  • 데이터 모델링에서는 NULL 허용 여부를 업무 규칙과 함께 판단해야 합니다.

FAQ

NULL은 빈문자열과 같은가요?

아닙니다. 빈문자열은 값이 있는 문자 데이터이고, NULL은 값 자체가 없는 상태입니다.

왜 NULL은 = 로 비교하면 안 되나요?

NULL은 일반 값이 아니라 특별한 상태이기 때문에, 비교할 때는 IS NULL 또는 IS NOT NULL을 사용해야 합니다.

COUNT(*)와 COUNT(컬럼)은 왜 다른가요?

COUNT(*)는 전체 행 수를 세고, COUNT(컬럼)은 NULL이 아닌 값만 세기 때문입니다.

NULL은 항상 나쁜 건가요?

아닙니다. 업무적으로 아직 값이 없거나 존재하지 않는 경우라면 자연스러운 상태일 수 있습니다.

SQLD에서도 NULL이 자주 나오나요?

네. 비교 연산, 집계 함수, 데이터 모델링과 함께 매우 자주 나오는 핵심 개념입니다.

반응형