Không, cách xử lý null của Oracle mang phong cách riêng, khác với mọi người khác và không phù hợp với các tiêu chuẩn ANSI. Tuy nhiên, theo lời bảo vệ của Oracle, nó có lẽ đã ổn định và cam kết thực hiện biện pháp xử lý này rất lâu trước khi có một tiêu chuẩn ANSI nhất quán!
Tất cả bắt đầu từ thực tế là Oracle lưu trữ các chuỗi với một số ký tự theo sau là dữ liệu chuỗi. NULL được biểu thị bằng số ký tự bằng 0 không có dữ liệu chuỗi nào theo sau - chính xác giống như một chuỗi rỗng (''). Đơn giản là Oracle không có cách nào để phân biệt chúng.
Điều này dẫn đến một số hành vi kỳ quặc, chẳng hạn như trường hợp nối này. Oracle cũng có một hàm LENGTH để trả về độ dài của một chuỗi, nhưng điều này đã được định nghĩa theo cách ngược lại, do đó LENGTH ('') trả về giá trị NULL chứ không phải bằng không. Vì vậy:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
đối với tôi dường như vi phạm các nguyên tắc toán học cơ bản.
Tất nhiên, các nhà phát triển Oracle đã quá quen với điều này đến nỗi nhiều người trong chúng ta thậm chí không thể thấy điều gì sai hoặc kỳ quặc về nó - một số thực tế sẽ tranh luận rằng phần còn lại của thế giới là sai và rằng một chuỗi rỗng và một NULL là điều tương tự!