NVL(expr1, expr2) 함수는 expr1이 null 이면 expr2을 반환하는 함수죠.
그리고 null 과 empty string(a.k.a. white space, blank)는 다르다고 알고 있죠.
그래서 a, b 필드를 비교할때 null 이 나와서 원하는대로 비교되지 않을 경우를 대비해
다음과 같이 쿼리를 짰습니다.(오라클10g 입니다.)
- SELECT * FROM T1 WHERE NVL(a, '') <> NVL(b, '')
그런데 결과가 원하는대로 안나오는 겁니다. 이상타 싶어 NVL 을 다시 테스트 해봤죠. 아래 처럼요.
- SELECT NVL(null, '') FROM DUAL
그랬더니 떡하니 나오는 결과
NVL(NULL,'') --------------- (null) 아~~~~ 이게 뭔지~~~@#$%
오라클은 '' (작은따옴표 두개)를 null 로 인식하는 것이었습니다!
제발 by design 이라고 말씀해주세요ㅠ_ㅠ