•
NULL이 0도 아니고 공백도 아니라는 것을 예로 들어 설명할 수 있다.
•
산술 · 문자열 결합 · 비교 연산에서 NULL이 어떻게 동작하는지 구분할 수 있다.
•
= NULL 이 왜 안 되고 IS NULL 을 써야 하는지 설명할 수 있다.
•
모델의 선택 속성 · NOT NULL · DEFAULT 가 NULL과 어떻게 연결되는지 안다.
1. NULL이란 무엇인가
1) 정의
NULL = "값이 존재하지 않음" (Unknown, 미지의 값)
•
아직 정해지지 않았거나, 해당 사항이 없거나, 입력되지 않은 상태
•
0이 아니고, 공백도 아니고, 빈 문자열도 아닙니다.2) NULL이 생기는 세 가지 이유
이유 | 설명 | 실습 스키마 예시 |
미확정 | 아직 값이 정해지지 않음 | 신입 선수의 POSITION |
해당 없음 | 그 대상에게는 존재하지 않는 값 | 사장 KING 의 MGR(관리자) |
미입력 | 값은 있지만 아직 입력 안 됨 | 선수의 NICKNAME |
3) NULL vs 0 vs 공백 — 완전히 다른 세 가지 

NULL | 0 | 공백 ' ' | |
의미 | 값이 없음 | 숫자 영(零) | 공백 문자 한 칸 |
저장 공간 | 차지하지 않음 | 차지함 | 차지함 |
산술 연산 | 결과가 NULL | 정상 계산 | (숫자 아님) |
길이(LENGTH) | NULL | 1 | 1 |
비교 가능? | 불가 | 가능 | 가능 |
구체적인 예로 보면
상황 | 값 | 의미 |
시험을 결시했다 | NULL | 점수 자체가 존재하지 않음 |
시험을 봤는데 다 틀렸다 | 0 | 0점이라는 값이 존재함 |
이 둘을 같게 취급하면 평균 점수가 완전히 달라집니다.
(결시자를 0점으로 계산하면 평균이 낮아짐)4)
Oracle의 특이점 — 빈 문자열은 NULL이다
입력한 값 | Oracle에서의 취급 |
'' (빈 문자열) | NULL ![]() |
' ' (공백 한 칸) | 공백 문자 (NULL 아님) |
다른 DBMS(MySQL, SQL Server)에서는 '' 과 NULL을 구분합니다.
Oracle만의 특징이므로 시험에서 주의하세요.
2. NULL 연산 규칙 


핵심입니다. 이 표 하나만 확실히 외우면 됩니다.1) 세 가지 연산의 결과가 서로 다르다
연산 종류 | NULL이 끼면 | 결과 |
산술 연산 (+ - * /) | 전체가 무너짐 | NULL |
문자열 결합 (||) | NULL을 무시함 | 나머지 문자열 ![]() |
비교 연산 (= > <) | 참도 거짓도 아님 | UNKNOWN (알 수 없음) |
가장 헷갈리는 지점
산술 연산은 NULL에 전염되는데, 문자열 결합은 NULL을 없는 셈 친다는 것.
이 차이가 시험에 자주 나옵니다.2) 산술 연산 — NULL이 하나라도 있으면 결과는 NULL
식 | 결과 |
100 + NULL | NULL |
100 - NULL | NULL |
100 * NULL | NULL |
100 / NULL | NULL |
NULL + NULL | NULL |
0 + NULL | NULL (0이 아님! ) |
실습 데이터로 확인 — EMP 의 급여 + 커미션
SELECT ENAME, SAL, COMM, SAL + COMM AS 합계 FROM EMP;
SQL
복사
사원명 | 급여 | 커미션 | 급여 + 커미션 |
ALLEN | 1600 | 300 | 1900 ![]() |
SMITH | 800 | (NULL) | (NULL) ![]() |
KING | 5000 | (NULL) | (NULL) ![]() |
급여가 분명히 있는데 합계가 NULL이 됩니다.
"급여를 못 받은 게 아니라, 계산이 불가능한 것" 입니다.3) 문자열 결합 — NULL은 무시된다 
식 | 결과 |
'ABC' || NULL | 'ABC' (NULL이 무시됨) |
NULL || 'ABC' | 'ABC' |
'A' || NULL || 'B' | 'AB' |
NULL || NULL | NULL |
실습 데이터로 확인 — 선수명과 별명 붙이기
선수명 | 별명 | 선수명 || '(' || 별명 || ')' |
김철수 | 슈퍼맨 | 김철수(슈퍼맨) ![]() |
이영희 | (NULL) | 이영희() — 별명만 빠지고 괄호는 남는다 |
별명이 NULL이면 괄호만 덩그러니 남습니다.
산술 연산처럼 전체가 NULL이 되지는 않습니다.4) 비교 연산 — NULL은 참도 거짓도 아니다 

식 | 결과 | 설명 |
NULL = NULL | UNKNOWN | "모르는 값"과 "모르는 값"이 같은지 알 수 없음 |
NULL <> NULL | UNKNOWN | 다른지도 알 수 없음 |
NULL = 100 | UNKNOWN | 비교 자체가 불가능 |
NULL > 100 | UNKNOWN |
핵심: WHERE 절은 결과가 TRUE인 행만 통과시킵니다.
UNKNOWN은 TRUE가 아니므로 모든 행이 걸러집니다.3. NULL은 IS NULL 로 확인한다
1) 올바른 문법
목적 | 틀린 문법 | 올바른 문법 |
NULL인 행 찾기 | WHERE COMM = NULL | WHERE COMM IS NULL |
NULL이 아닌 행 찾기 | WHERE COMM <> NULL | WHERE COMM IS NOT NULL |
-- ❌ 0건 조회됨 (UNKNOWN 이므로 아무 행도 통과 못 함)
SELECT ENAME FROM EMP WHERE COMM = NULL;
-- ✅ 커미션이 없는 사원이 정상 조회됨
SELECT ENAME FROM EMP WHERE COMM IS NULL;
SQL
복사
결과 비교
조회 | 결과 건수 |
WHERE COMM = NULL | 0건 (오류는 안 나지만 아무것도 안 나옴) |
WHERE COMM IS NULL | 10건 ![]() |
WHERE COMM IS NOT NULL | 4건 ![]() |
가장 무서운 점: = NULL 은 에러가 나지 않습니다.
그냥 조용히 0건을 반환하므로 버그를 알아채기 어렵습니다.6. 확인 문제
Q1. NULL에 대한 설명으로 옳지 않은 것은?
① 값이 존재하지 않음을 의미한다
② 숫자 0과 같은 의미이다
③ 공백 문자와는 다르다
④ Oracle에서 빈 문자열('')은 NULL로 취급된다
정답 보기
Q2. 다음 연산의 결과를 각각 쓰시오.
# | 식 | 결과 |
① | 100 + NULL | ? |
② | 'ABC' || NULL | ? |
③ | NULL = NULL | ? |
정답 보기
Q3. 아래 SQL을 실행했을 때 결과는?
SELECT ENAME FROM EMP WHERE COMM = NULL;
SQL
복사
정답 보기




가능