Нет, обработка Oracle нулей является уникальной, отличается от всех остальных и несовместима со стандартами ANSI. Однако, в защиту Oracle, он, вероятно, остановился на этом подходе и был привержен ему задолго до того, как появился стандарт ANSI, который должен был соответствовать!
Все начинается с того факта, что Oracle хранит строки с количеством символов, за которым следуют строковые данные. NULL представлен нулевым количеством символов без следующих строковых данных, что в точности совпадает с пустой строкой (''). У Oracle просто нет способа их различить.
Это приводит к некоторому странному поведению, такому как этот случай объединения. В Oracle также есть функция LENGTH, которая возвращает длину строки, но это было определено противоположным образом, поэтому LENGTH ('') возвращает NULL, а не ноль. Итак:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
что мне кажется нарушающим основные математические принципы.
Конечно, разработчики Oracle настолько привыкли к этому, что многие из нас даже не видят в этом ничего плохого или странного - некоторые на самом деле утверждают, что весь остальной мир неправ, и что пустая строка и NULL это одно и то же!