• Keep in mind the query is run thru the interpreter before it actually executes and many times the query is reformulated to the overall condition.

    In you last examples the interpreter sees the fact the right table is referenced in the where clause despite it being a left join. Since the net condition is an inner join, that also would provide the fastest execution plan for the overall query, the query is optimized by the interpreter and actually executed as an inner join.

    If you run

    select *

     from a

     inner join b

      on a.id = b.id

     where b.id != 8

    you will find you get exactly the same execution plan as

    select *

     from a

     left outer join b

      on a.id = b.id

     where b.id != 8