Nee, Oracle's behandeling van nulls is eigenzinnig, anders dan die van alle anderen, en inconsistent met de ANSI-normen. Ter verdediging van Oracle echter, heeft het waarschijnlijk genoegen genomen met en toegewijd aan deze behandeling lang voordat er een ANSI-standaard was om in overeenstemming te zijn met!
Het begint allemaal met het feit dat Oracle strings opslaat met een karaktertelling gevolgd door de stringgegevens. Een NULL wordt weergegeven door een tekentelling van nul zonder volgende tekenreeksgegevens - wat precies hetzelfde is als een lege tekenreeks (''). Oracle heeft gewoon geen manier om ze te onderscheiden.
Dit leidt tot eigenzinnig gedrag, zoals dit aaneenschakelingsgeval. Oracle heeft ook een functie LENGTH om de lengte van een string te retourneren, maar dit is op een tegenovergestelde manier gedefinieerd, zodat LENGTH('') NULL en niet nul retourneert. Dus:
LENGTH('abc') + LENGTH('') IS NULL
LENGTH('abc' || '') = 3
wat mij lijkt in strijd met wiskundige basisprincipes.
Natuurlijk raken Oracle-ontwikkelaars hier zo aan gewend dat velen van ons er zelfs niets verkeerds of vreemds aan kunnen zien - sommigen zullen zelfs beweren dat de rest van de wereld ongelijk heeft en dat een lege string en een NULL zijn hetzelfde!