ممنون توضیح شما درسته ولی کامل توضیح ندادین.
ببینید وقتی که دستورات Parse می شوند در Outer Join ابتدا به صورت یک Inner join عمل کرده و هردو جدول براساس قیدهایی که در On ذکر شده باهم Join می شوند و بعد از آن دوباره عمل Join با جدول فوق صورت میگیرد که سبب می شود رکوردهایی که الان در جدول اصلی نیست رو به صورت null به ما نشون میده و در واقع دوبار عمل join انجام میشه یک بار با استفاده از on یک بار بعد از اینکه جدول از on تشکیل شد. به همین خاطر باید در Outer Join شرط رو در where بنویسید تا نتیجه درست بگیرید ولی در Inner join چون یک بار عملیات تشکیل جدول مجازی صورت گرفته و دیگه join اضافی انجام نمی شود به همین خاطر در همون مرحله اولیه ON نیز بر روی جدول صورت میگیرد. به همین خاطر در Inner join تفاوتی نداره که شرط رو در on بنویسید یا در where.
دلیل کندی Outer join نسبت به Inner join نیز همین امر هست.