EXISTS 연산자와 NULL 반환 하위 쿼리의 평가 방식
MySQL에서 EXISTS 연산자와 함께 사용된 하위 쿼리가 NULL을 반환하는 경우, EXISTS NULL 표현식은 TRUE로 평가됩니다. 따라서 최종 결과는 외부 쿼리(outer query)의 조건에 따라 결정됩니다.
이는 다소 직관적이지 않게 느껴질 수 있지만, EXISTS 연산자는 하위 쿼리가 반환하는 값 자체가 아니라 행(row)의 존재 여부만 확인하기 때문입니다. NULL이라는 값이 반환되었다는 것 자체가 '결과가 존재한다'는 의미가 되므로 EXISTS는 TRUE를 반환하게 됩니다.
예제 데이터: Customers 테이블
다음과 같은 데이터를 가진 'Customers' 테이블을 통해 간단히 이해할 수 있습니다.
mysql> Select * from Customers; +-------------+----------+ | Customer_Id | Name | +-------------+----------+ | 1 | Rahul | | 2 | Yashpal | | 3 | Gaurav | | 4 | Virender | +-------------+----------+ 4 rows in set (0.00 sec)
NULL을 반환하는 하위 쿼리 실행 예시
아래 MySQL 쿼리는 EXISTS 연산자와 함께 NULL을 반환하는 하위 쿼리를 사용합니다. 이 경우 EXISTS(Select NULL) 표현식이 TRUE로 평가되기 때문에, WHERE 절의 조건은 모든 행에 대해 참이 되며 결과 집합은 외부 쿼리에 의해 결정됩니다.
mysql> SELECT Name from Customers Where EXISTS(Select NULL); +----------+ | Name | +----------+ | Rahul | | Yashpal | | Gaurav | | Virender | +----------+ 4 rows in set (0.00 sec)
정리
- 하위 쿼리가 NULL을 반환해도 EXISTS는 FALSE가 아닌 TRUE를 반환합니다.
- EXISTS는 반환된 값이 아니라 행의 존재 여부만 판단합니다.
- 따라서 위 예제에서는 Customers 테이블의 모든 행이 결과로 출력됩니다.