MySQL에서 NULL과 비교 연산자를 함께 사용할 수 없는 이유
MySQL에서 NULL은 '값이 존재하지 않음' 또는 '알 수 없는 값'을 나타내는 특수한 표시입니다. 바로 이 성질 때문에 '=', '<', '<>'와 같은 일반적인 비교 연산자를 NULL과 함께 사용하면 의미 있는 결과를 얻을 수 없습니다.
어떤 값이든 알 수 없는 값(NULL)과 비교하면, 그 비교 결과 자체도 '알 수 없음', 즉 NULL로 반환됩니다. 아래 예제를 통해 이 개념을 확인해 보겠습니다.
mysql> Select 10 = NULL, 10< NULL, 10<>NULL; +-----------+----------+----------+ | 10 = NULL | 10< NULL | 10<>NULL | +-----------+----------+----------+ | NULL | NULL | NULL | +-----------+----------+----------+ 1 row in set (0.07 sec)
위 결과 집합을 보면 세 가지 비교 모두 TRUE나 FALSE가 아닌 NULL을 반환합니다. 10이 NULL보다 큰지, 작은지, 같은지 판단할 수 없기 때문에 이러한 결과는 어떤 의미도 갖지 못합니다.
그렇다면 NULL은 어떻게 비교해야 할까?
NULL 값을 확인하려면 '=' 대신 IS NULL, '<>' 대신 IS NOT NULL 연산자를 사용해야 합니다. 다음 예제처럼 말입니다.
mysql> Select 10 IS NULL, 10 IS NOT NULL; +------------+----------------+ | 10 IS NULL | 10 IS NOT NULL | +------------+----------------+ | 0 | 1 | +------------+----------------+ 1 row in set (0.00 sec)
정리하면, NULL은 '알 수 없는 값'이므로 일반 비교 연산자와 함께 사용하면 항상 NULL이 반환되어 무의미한 결과가 됩니다. 따라서 NULL 여부를 판별할 때는 반드시 IS NULL 또는 IS NOT NULL 연산자를 사용하는 것이 올바른 방법입니다.