MySQL NULL 안전 등호 연산자(<=>)란?
MySQL의 NULL 안전 등호 연산자(NULL-safe equal operator)는 기호 <=>로 표현되며, 표준 SQL의 IS NOT DISTINCT FROM 연산자와 동일한 역할을 합니다. 이 연산자는 = 연산자처럼 두 값이 같은지 비교하지만, 피연산자에 NULL이 포함된 경우 일반 비교 연산자와 전혀 다른 결과를 반환한다는 점이 가장 큰 특징입니다.
NULL 안전 등호 연산자의 동작 방식
<=> 연산자는 NULL을 하나의 비교 가능한 값으로 취급합니다. 따라서 결과는 다음과 같습니다.
- 두 피연산자가 모두
NULL이면 1(TRUE)을 반환합니다. - 피연산자 중 하나만
NULL이면 0(FALSE)을 반환합니다. - 둘 다
NULL이 아니면 일반 등호(=) 비교와 동일하게 동작합니다.
일반 비교 연산자(=)와의 차이점
반면 = 연산자는 SQL에서 NULL을 '알 수 없는 값(unknown)'으로 간주하기 때문에, 피연산자 중 하나라도 NULL이면 비교 결과 자체가 NULL이 됩니다. 아래 예제를 통해 두 연산자의 차이를 직접 확인해 보겠습니다.
mysql> Select 50 <=> 50, NULL <=> NULL, 100 <=> NULL; +-----------+---------------+--------------+ | 50 <=> 50 | NULL <=> NULL | 100 <=> NULL | +-----------+---------------+--------------+ | 1 | 1 | 0 | +-----------+---------------+--------------+ 1 row in set (0.00 sec) mysql> Select 50 = 50, NULL = NULL, 100 = NULL; +---------+-------------+------------+ | 50 = 50 | NULL = NULL | 100 = NULL | +---------+-------------+------------+ | 1 | NULL | NULL | +---------+-------------+------------+ 1 row in set (0.00 sec)
결과 해석
50 <=> 50→ 1 : 두 값이 같으므로 참NULL <=> NULL→ 1 : 양쪽 모두 NULL이므로 참 (일반=에서는 NULL 반환)100 <=> NULL→ 0 : 한쪽만 NULL이므로 거짓 (일반=에서는 NULL 반환)
정리 및 활용 팁
<=> 연산자는 NULL이 포함된 비교에서도 항상 명확한 TRUE(1) 또는 FALSE(0)를 보장합니다. 따라서 조인 조건이나 WHERE 절에서 NULL 값까지 정확히 비교해야 할 때, IS NULL과 OR을 조합한 복잡한 조건문 대신 <=> 하나로 코드를 훨씬 간결하고 안전하게 작성할 수 있습니다.