MySQL에서 값을 != NULL로 비교하면 결과는 항상 NULL을 반환합니다. 이는 SQL에서 NULL은 '알 수 없는 값'으로 취급되기 때문에, 어떤 값과 비교하더라도 참·거짓을 판별할 수 없기 때문입니다. 따라서 != NULL 조건은 실질적으로 아무 의미가 없습니다.
반면 IS NOT NULL은 해당 값이 NULL인지 아닌지를 명확하게 판별하는 전용 연산자입니다.
두 방식의 차이를 직접 확인하기 위해 먼저 테이블을 생성해 보겠습니다.
1. 테이블 생성
mysql> create table DemoTable1970
(
Value int
);
Query OK, 0 rows affected (0.00 sec)2. 데이터 삽입
insert 명령어를 사용해 일반 값과 NULL 값을 하나씩 저장합니다.
mysql> insert into DemoTable1970 values(10); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1970 values(NULL); Query OK, 1 row affected (0.00 sec)
3. 저장된 데이터 확인
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select * from DemoTable1970;
실행 결과는 다음과 같습니다.
+-------+ | Value | +-------+ | 10 | | NULL | +-------+ 2 rows in set (0.00 sec)
4. != NULL과 IS NOT NULL 비교
이제 두 방식의 차이를 한눈에 볼 수 있는 쿼리를 실행해 보겠습니다.
mysql> select Value!=NULL as Output1, Value IS NOT NULL as Output2 from DemoTable1970;
실행 결과는 다음과 같습니다.
+---------+---------+ | Output1 | Output2 | +---------+---------+ | NULL | 1 | | NULL | 0 | +---------+---------+ 2 rows in set (0.00 sec)
결과 분석
- Output1 (
!= NULL): 값이 10이든 NULL이든 상관없이 항상 NULL을 반환합니다. 즉, 어떤 행도 필터링하지 못하므로 사용할 수 없는 조건입니다. - Output2 (
IS NOT NULL): 값이 10인 행에서는 1(참)을, NULL인 행에서는 0(거짓)을 반환하여 정확한 판별이 가능합니다.
결론적으로 MySQL에서 NULL 여부를 검사할 때는 반드시 IS NOT NULL 또는 IS NULL을 사용해야 하며, != NULL이나 = NULL 같은 비교 연산자는 절대 사용해서는 안 됩니다.