I was wondering which is faster an INNER JOIN or INNER SELECT with IN?
select t1.* from test1 t1
inner join test2 t2 on t1.id = t2.id
where t2.id = 'blah'
OR
select t1.* from test1 t1
where t1.id IN (select t2.id from test2 t2 where t2.id = 'blah')
Assuming
idis key, these queries mean the same thing, and a decent DBMS will execute them in the exact same way. Unfortunately MySQL doesn’t, as can be seen by expanding the “View Execution Plan” link in this SQL Fiddle. Which one will be faster probably depends on the size of tables – ifTABLE1has very few rows, then IN has a chance for being faster, while JOIN will likely be faster in all other cases.This is a peculiarity of MySQL’s query optimizer. I’ve never seen Oracle, PostgreSQL or MS SQL Server execute such simple equivalent queries differently.