ऐसा लगता है कि समस्या यह है कि आप (+) . का उपयोग नहीं कर रहे हैं आपके language_id . के लिए जाँच करता है।
आपकी तालिका बाहरी रूप से जुड़ी हुई है, इसलिए language_id है NULL जब कोई रिकॉर्ड नहीं मिलता है, लेकिन तब आप language_id = 2 . की जांच करते हैं , लेकिन ? language_id है NULL ।
मैं यह भी नहीं देखता कि आप a_tl . के परिणामों का उपयोग कहां करते हैं या b_tl , लगता है कि यह सिर्फ आपकी पोस्ट की समस्या है, आपकी मूल क्वेरी की नहीं?
हालांकि, कृपया पुराने सिंटैक्स के बजाय स्पष्ट जॉइन का उपयोग करें। एक बार जब आप इसके अभ्यस्त हो जाते हैं, तो इसे पढ़ना और समझना बहुत आसान हो जाता है।
आपकी क्वेरी COALESCE
(या NVL अगर आपको पसंद है):
SELECT COALESCE( a_tl.a_disp_name, a.a_name ) AS a_name,
COALESCE( b_tl.b_disp_name, b.b_name ) AS b_name,
a.a_id,
b.b_id
FROM a
JOIN b ON ( b.b_id = a.a_id )
LEFT JOIN a_tl ON ( a_tl.a_id = a.a_id AND a_tl.language_id = 2 )
LEFT JOIN b_tl ON ( b_tl.b_id = b.b_id AND b_tl.language_id = 2 )
आशा है कि मुझे आपका प्रश्न सही लगा, कृपया पूछें कि क्या यह काम नहीं करता है।