यह SQL सर्वर की एक ज्ञात "सुविधा" है। यह कभी न मानें कि WHERE क्लॉज SELECT क्लॉज से पहले निष्पादित होता है।
देखें:SQL सर्वर चाहिए अतार्किक त्रुटियां न उठाएं
कभी-कभी ऐसा करने के लिए वास्तव में अच्छे कारण होते हैं। दो तालिकाओं में शामिल होने पर विचार करें, जिसमें A, B से बहुत छोटा है।
select CAST(A.col1 as int), A.col2, B.col3
from A join B ...
where ... isnumeric(A.col1) = 1
यदि आप सही या गलत जेनरेट की गई क्वेरी योजना का निरीक्षण करते हैं, तो SQL सर्वर A से डेटा को B से जुड़ने के लिए प्रमुख पंक्तियों के रूप में स्ट्रीम करेगा। ऐसा करते समय, वह जानता है कि उसे केवल col2
खींचने की आवश्यकता है और function on col1
. यह col1
. ला सकता है फ़ंक्शन को बाद में चलाने के लिए, या CAST जैसी तुच्छ चीज़ के लिए, SQL सर्वर स्ट्रीमिंग प्रक्रिया के दौरान डेटा को रूपांतरित भी कर सकता है।
एक बात निश्चित रूप से है, यह रणनीति कुछ प्रश्नों में SQL सर्वर को थोड़ा तेज बनाती है। लेकिन विशुद्ध तार्किक दृष्टिकोण से, मैं इसे एक बग कहूंगा।