• You might think "there should be no problem with what to join together" because you put parentheses around the derived table, but the query optimizer has its own agenda sometimes.  What did the execution plan look like?  You have got to give the query compiler credit, it's not easy to fool it with an extra level of parenthesis.

    A working hypothesis might be that in SQL Server once you use an old=style join then all WHERE clauses that refer to tables A or B (either singly or together) are interpreted as join conditions.  I don't know this to be true, but it explains the examples you've presented.  The difference in Oracle may be that it only uses conditions on both tables for joining, while conditions on only one table are used for filtering.