Nie, podejście Oracle do wartości zerowych jest idiosynkratyczne, inne niż wszystkich innych i niezgodne ze standardami ANSI. Jednak w obronie Oracle prawdopodobnie przyjęło to rozwiązanie i było ono zaangażowane na długo przed tym, zanim pojawił się standard ANSI, z którym należałoby być zgodnym!
Wszystko zaczyna się od tego, że Oracle przechowuje ciągi znaków z liczbą znaków, po której następują dane ciągu. Wartość NULL jest reprezentowana przez liczbę znaków równą zero bez następujących danych ciągu — co jest dokładnie takie samo, jak pusty ciąg (''). Oracle po prostu nie potrafi ich odróżnić.
Prowadzi to do dziwacznych zachowań, takich jak ten przypadek konkatenacji. Oracle ma również funkcję LENGTH, która zwraca długość ciągu, ale została ona zdefiniowana w odwrotny sposób, tak że LENGTH('') zwraca NULL, a nie zero. A więc:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
co wydaje mi się naruszać podstawowe zasady matematyczne.
Oczywiście programiści Oracle są tak przyzwyczajeni do tego, że wielu z nas nie widzi w tym nic złego lub dziwnego – niektórzy w rzeczywistości twierdzą, że reszta świata się myli i że pusty ciąg i NULL są to samo!