इसका मतलब है कि यदि कोई भी पंक्ति अगर लौटा दी जाएगी @regionहै NULLजब अपने पहले उदाहरण में प्रयुक्त भले ही मेज जहां में पंक्तियों कर रहे हैं, Regionहै NULL।
जब ANSI_NULLSचालू हो (जिसे आपको हमेशा किसी भी तरह सेट करना चाहिए, क्योंकि यह नहीं होने का विकल्प भविष्य में हटा दिया जाएगा), कोई भी तुलनात्मक ऑपरेशन जहां (कम से कम) एक ऑपरेंड में NULLसे तीसरा लॉजिक मान उत्पन्न होता है - UNKNOWN( के रूप में विरोध किया TRUEऔर FALSE)।
UNKNOWNमान किसी भी बूलियन ऑपरेटरों के माध्यम से प्रचारित करते हैं यदि वे पहले से तय नहीं किए जाते हैं (जैसे ANDएक FALSEऑपरेंड के ORसाथ या एक TRUEऑपरेंड के साथ ) या नकारात्मक ( NOT)।
WHEREखंड फिल्टर करने के लिए परिणाम सेट द्वारा उत्पादित किया जाता है FROMखंड, ऐसा है कि के कुल मूल्य WHEREखंड होना चाहिए TRUEपंक्ति के लिए फिल्टर नहीं किया जा करने के लिए। इसलिए, यदि कोई UNKNOWNकिसी तुलना द्वारा निर्मित होता है , तो यह पंक्ति को फ़िल्टर करने का कारण बनेगा।
@ user1227804 के उत्तर में यह उद्धरण शामिल है:
यदि तुलना के दोनों किनारे स्तंभ या यौगिक अभिव्यक्ति हैं, तो सेटिंग तुलना को प्रभावित नहीं करती है।
से *SET ANSI_NULLS
हालाँकि, मुझे यकीन नहीं है कि यह किस बिंदु को बनाने की कोशिश कर रहा है, क्योंकि अगर दो NULLस्तंभों की तुलना की जाती है (उदाहरण के लिए JOIN), तो तुलना अभी भी विफल रहती है:
create table
ID int not null,
Val1 varchar(10) null
)
insert into
create table
ID int not null,
Val1 varchar(10) null
)
insert into
select * from
उपरोक्त क्वेरी 0 पंक्तियों को लौटाती है, जबकि:
select * from
एक पंक्ति लौटाता है। तो जब दोनों ऑपरेंड कॉलम होते हैं, तब NULLभी नहीं के बराबर होता है NULL। और ऑपरेंड के बारे में कहने के लिए प्रलेखन के= पास कुछ भी नहीं है:
जब आप दो NULLअभिव्यक्तियों की तुलना करते हैं, तो परिणाम ANSI_NULLSसेटिंग पर निर्भर करता है :
यदि ANSI_NULLSसेट किया गया है ON, तो एएनएसआई सम्मेलन के बाद परिणाम NULL1 है , जो कि NULL(या अज्ञात) मूल्य दूसरे NULLया अज्ञात मूल्य के बराबर नहीं है ।
यदि ANSI_NULLSनिर्धारित किया जाता है OFF, तो NULLतुलना की जाती NULLहै TRUE।
NULLएक गैर- NULLमूल्य की तुलना में हमेशा FALSE2 का परिणाम होता है ।
हालांकि, 1 और 2 दोनों गलत हैं - दोनों तुलनाओं का परिणाम है UNKNOWN।
* इस पाठ का गूढ़ अर्थ अंततः वर्षों बाद खोजा गया था। वास्तव में इसका क्या मतलब है, उन तुलनाओं के लिए, सेटिंग का कोई प्रभाव नहीं है और यह हमेशा कार्य करता है जैसे कि सेटिंग चालू थी । स्पष्ट होगा यदि यह कहा SET ANSI_NULLS OFFगया था कि सेटिंग थी जिसका कोई प्रभाव नहीं था।