With your query it won't return an error only if the subquery return 1 and only 1 result.
You should do an explain on the query :
Explain select * from table1
where table1_seq = (select table2_seq from table2 where id2=X)
Will return something like that :
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra
==========================================================================================================================================================
1 | PRIMARY | Table1 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL
2 | SUBQUERY | Table2 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | Using index
Inner Join in other hand will also do 2 query :
EXPLAIN select table1.*
from table1
INNER JOIN table2 ON table1.table1_seq = table2.table2_seq
WHERE table2.id2=X
Result :
id | select_type | table | partitions | type | possible_keys | key | key_len | ref | rows | filtered | Extra
==========================================================================================================================================================
1 | SIMPLE | Table1 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL
2 | SIMPLE | Table2 | NULL | const | PRIMARY | PRIMARY | 4 | const | 1 | 100.00 | NULL
So it's less a problem of benchmark and more about of what you want to do. If you want to select only 1 value from another table you can really do the query you wrote.