Case Behavior Changed Between 11.2.0.1 and 11.2.0.2
Can reproduce on the 11gR2 database hosting apex.oracle.com

The following query results in 3 rows:

SELECT t1.*, t2.*, t3.dummy, case when 1=1 then 'a' else 'b' end "Case/Decode"
FROM t1
LEFT JOIN (select 1 dummy from dual) t3 ON t3.dummy = t1.id1
LEFT JOIN t2 ON t1.id1 = t2.id2
WHERE (t2.id2 IS NOT NULL or t3.dummy IS NOT NULL)


Removing the CASE selection gives two rows and changes the value of t3.dummy from '1' to null.

Using the EXPLAIN PLAN, you can see that adding the CASE removes the FILTER

"T2"."ID2" IS NOT NULL OR CASE WHEN ROWID IS NOT NULL THEN 1 ELSE NULL END IS NOT NULL"


I suspect the optimizer is rejigging the link to dual. An outer join to dual, performed in a inline view, is very odd thing so I suspect it won't affect many people.