मेरा मानना है कि इसका उत्तर यह है कि Oracle बहुत, बहुत पुराना है।
पुराने दिनों में वापस SQL मानक होने से पहले, Oracle ने डिज़ाइन निर्णय लिया था कि VARCHAR में रिक्त स्ट्रिंग्स /VARCHAR2 कॉलम थे NULL और यह कि NULL का केवल एक ही अर्थ था (ऐसे संबंधपरक सिद्धांतकार हैं जो डेटा के बीच अंतर करते हैं जिसके लिए कभी संकेत नहीं दिया गया है, डेटा जहां उत्तर मौजूद है लेकिन उपयोगकर्ता द्वारा ज्ञात नहीं है, डेटा जहां कोई जवाब नहीं है, आदि। सभी जो NULL . का कुछ अर्थ बनाते हैं )।
जब तक SQL मानक आ गया और सहमत हो गया कि NULL और खाली स्ट्रिंग अलग-अलग इकाइयाँ थीं, पहले से ही Oracle उपयोगकर्ता थे जिनके पास कोड था जो मानता था कि दोनों समान थे। तो ओरेकल मूल रूप से मौजूदा कोड को तोड़ने, एसक्यूएल मानक का उल्लंघन करने, या किसी प्रकार के प्रारंभिक पैरामीटर को पेश करने के विकल्पों के साथ छोड़ दिया गया था जो संभावित रूप से बड़ी संख्या में प्रश्नों की कार्यक्षमता को बदल देगा। SQL मानक (IMHO) का उल्लंघन इन तीन विकल्पों में सबसे कम विघटनकारी था।
Oracle ने इस संभावना को खुला छोड़ दिया है कि VARCHAR SQL मानक का पालन करने के लिए भविष्य के रिलीज़ में डेटा प्रकार बदल जाएगा (यही कारण है कि हर कोई VARCHAR2 का उपयोग करता है Oracle में चूंकि उस डेटा प्रकार का व्यवहार आगे भी वैसा ही रहने की गारंटी है)।