Possible Duplicate:
Is having an 'OR' in an INNER JOIN condition a bad idea?
Look at this example of tables (not real):
CREATE TABLE Orders
(
    id BIGINT PRIMARY KEY,
    product VARCHAR(64),
    author VARCHAR(64),
    user_id BIGINT
)
CREATE TABLE User
(
    id BIGINT PRIMARY KEY,
    mail VARCHAR(64)
)
Imagine, this tables have indexes for all columns you would like to search...
This is my first query:
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (o.product in ('aaa','bbb'))
       OR (o.author in ('user1','user2')) 
       OR (u.mail in ('a@a.com','b@b.com'))
First is VERY-VERY-VERY slow...
100M Orders x 100M Users => 10 mins
This is my second query:
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (o.product in ('aaa','bbb'))
       OR (o.author in ('user1','user2')) 
    UNION 
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (u.mail in ('a@a.com','b@b.com'))
Second is VERY slow...
100M Orders x 100M Users => 4 mins
This is my third query:
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (o.product in ('aaa','bbb'))
    UNION 
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (o.author in ('user1','user2')) 
    UNION 
   SELECT *
     FROM Orders o
LEFT JOIN user u
       ON o.user_id = u.id
    WHERE (u.mail in ('a@a.com','b@b.com'))
Third query is really FAST!!!
100M Orders x 100M Users => 0.1 sec
Why SQL Server 2005 can't do this automatically?
UPD: Changed UNION ALL to UNION
UPD2:
first and second query: 90% of plan is "Matching Hash"
third query: 88% of plan is "Clustered index search".
 
    