Posted
Filed under DataBase/Oracle
Oracle SQL에서 WHERE 절에 조건을 걸 때, NULL 값이 포함된 컬럼은 왜 조회되지 않을까요? 특히 =나 LIKE 조건을 사용하면 NULL인 행이 결과에서 빠지는 이유와 이를 처리하는 방법을 정리했습니다.

1. NULL은 비교 연산에서 항상 FALSE 또는 UNKNOWN

SQL에서 NULL은 "값이 없음"을 뜻합니다.
그래서 다음 조건들은 모두 FALSE 또는 UNKNOWN으로 처리됩니다.
 
 - 컬럼 = NULL → 항상 FALSE (실제로는 UNKNOWN)
 - 컬럼 LIKE '%' → 컬럼이 NULL이면 결과는 UNKNOWN
 
따라서 WHERE 컬럼 = 'abc' 조건은 컬럼이 NULL인 행을 전혀 포함하지 않습니다.
2. NULL 값을 정확히 조회하려면 IS NULL 사용
NULL을 직접 조회할 때는 반드시 IS NULL 조건을 사용해야 합니다.

 SELECT * FROM 테이블명 WHERE 컬럼 IS NULL;
 
컬럼 = NULL은 절대 쓰면 안 됩니다.

3. NULL 포함 조회 방법
예를 들어, 컬럼이 'abc'이거나 NULL인 행 모두 조회하려면:
SELECT * FROM 테이블명 WHERE 컬럼 = 'abc' OR 컬럼 IS NULL;
 
마찬가지로, LIKE 조건과 NULL 포함 조회는 이렇게 씁니다:
SELECT * FROM 테이블명 WHERE 컬럼 LIKE '%패턴%' OR 컬럼 IS NULL;


4. NVL 함수를 활용한 NULL 처리
NVL 함수는 NULL 값을 다른 값으로 대체합니다. 예를 들어:
WHERE NVL(컬럼, '대체값') LIKE '%패턴%'
 
이때 주의할 점은 NVL(컬럼, '%') LIKE '%' 처럼 사용하면 NULL도 포함되지만, 조건 자체가 항상 참이 되어 버려 실질적인 필터링 의미가 없어집니다.

정리
 - NULL은 비교 연산자(=, LIKE 등)에서 항상 제외된다.
 - NULL을 조회하려면 IS NULL을 꼭 써야 한다.
 - NULL 포함 조건은 OR 컬럼 IS NULL을 추가하거나 NVL로 처리 가능하나, 무조건 참이 되지 않도록 주의해야 한다.
2025/07/27 15:45 2025/07/27 15:45