NULL 값이 여러 개인 열에 DISTINCT 적용 시 MySQL의 동작
여러 개의 NULL 값이 포함된 열에 DISTINCT 절을 적용하면, MySQL은 모든 NULL 값을 동일한 값으로 취급합니다.
즉, DISTINCT 절의 기본 특성에 따라 결과 집합에는 NULL이 단 하나만 반환되고, 나머지 중복 NULL 값들은 모두 제거됩니다.
예제로 확인하기
'testing'이라는 테이블의 'Lname' 열에 NULL 값이 여러 개 저장되어 있다고 가정해 보겠습니다.
mysql> Select * from testing; +------+---------+---------+ | id | fname | Lname | +------+---------+---------+ | 200 | Raman | Kumar | | 201 | Sahil | Bhalla | | 202 | Gaurav | NULL | | 203 | Aarav | NULL | | 204 | Harshit | Khurana | | 205 | Rahul | NULL | | 206 | Piyush | Kohli | | 207 | Lovkesh | NULL | +------+---------+---------+ 8 rows in set (0.00 sec) mysql> SELECT DISTINCT Lname from testing; +---------+ | Lname | +---------+ | Kumar | | Bhalla | | NULL | | Khurana | | Kohli | +---------+ 5 rows in set (0.00 sec)
결과 분석
위 예제에서 'Lname' 열에는 원래 4개의 NULL 값이 존재하지만, DISTINCT 절을 적용한 쿼리 결과에는 NULL이 단 한 번만 표시된 것을 확인할 수 있습니다.
이처럼 MySQL은 DISTINCT 연산 시 NULL을 일반적인 고유 값처럼 하나의 그룹으로 묶어 처리하므로, 중복 제거 대상에 NULL도 포함됩니다. 이는 SQL 표준의 DISTINCT 동작 방식과도 일치하는 결과입니다.