Q:

Faster to do a 'WHERE IN (SELECT)' or 'WHERE x = (SELECT)'

Which select statement is better?
SELECT *
FROM  aTable
WHERE aField in (
    SELECT xField 
    FROM   bTable
    WHERE  yField > 5
);

OR
SELECT *
FROM  aTable
WHERE (
    SELECT yField
    FROM   bTable
    WHERE  aTable.aField = bTable.xField
) > 5;

A:

They produce very similar execution plans (on my test tables, which are tiny; YMMV, always profile real data), and there's a third alternative you may want to consider instead:
The first:
EXPLAIN SELECT * FROM aTable WHERE aField in (SELECT xField FROM bTable WHERE yField > 5);

+----+--------------------+--------+-------+---------------+---------------+---------+------+------+-------------+
| id | select_type        | table  | type  | possible_keys | key           | key_len | ref  | rows | Extra       |
+----+--------------------+--------+-------+---------------+---------------+---------+------+------+-------------+
|  1 | PRIMARY            | aTable | ALL   | NULL          | NULL          | NULL    | NULL |    4 | Using where |
|  2 | DEPENDENT SUBQUERY | bTable | range | bTable_yField | bTable_yField | 5       | NULL |    2 | Using where |
+----+--------------------+--------+-------+---------------+---------------+---------+------+------+-------------+
The second:
EXPLAIN SELECT * FROM aTable WHERE (SELECT yField FROM bTable WHERE aTable.aField = bTable.xField) > 5;

+----+--------------------+--------+------+---------------+------+---------+------+------+-------------+
| id | select_type        | table  | type | possible_keys | key  | key_len | ref  | rows | Extra       |
+----+--------------------+--------+------+---------------+------+---------+------+------+-------------+
|  1 | PRIMARY            | aTable | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where |
|  2 | DEPENDENT SUBQUERY | bTable | ALL  | NULL          | NULL | NULL    | NULL |    4 | Using where |
+----+--------------------+--------+------+---------------+------+---------+------+------+-------------+
Both result in a dependent subquery; on my example tables, the first one gets the benefit of the index (I assume bTable.yField is indexed) while the second doesn't.
You can avoid the dependent subquery and get better up-front filtering using a JOIN:
The third alternative:
EXPLAIN SELECT * FROM aTable INNER JOIN bTable On aTable.aField = bTable.xField WHERE bTable.yField > 5;

+----+-------------+--------+-------+---------------+---------------+---------+------+------+--------------------------------+
| id | select_type | table  | type  | possible_keys | key           | key_len | ref  | rows | Extra                          |
+----+-------------+--------+-------+---------------+---------------+---------+------+------+--------------------------------+
|  1 | SIMPLE      | bTable | range | bTable_yField | bTable_yField | 5       | NULL |    2 | Using where                    |
|  1 | SIMPLE      | aTable | ALL   | NULL          | NULL          | NULL    | NULL |    4 | Using where; Using join buffer |
+----+-------------+--------+-------+---------------+---------------+---------+------+------+--------------------------------+
Again, though, you really have to profile with your schema and your representative real-world data, as the optimizer may make different decisions.
More comparing these sorts of techniques in this excellent article by quassnoi.

For reference, here is how I created aTable and bTable (as you didn't provide definitions) and tested your queries:
mysql> CREATE TABLE aTable (aField INT, aMore VARCHAR(200));
Query OK, 0 rows affected (0.01 sec)

mysql> CREATE TABLE bTable (xField INT, yField INT);
Query OK, 0 rows affected (0.02 sec)

mysql> INSERT INTO aTable (aField, aMore) VALUES (1, 'One'), (2, 'Two'), (3, 'Three'), (4, 'Four');
Query OK, 4 rows affected (0.00 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> INSERT INTO bTable (xField, yField) VALUES (1, 10), (2, 2), (3, 20), (4, 4);
Query OK, 4 rows affected (0.02 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> CREATE INDEX bTable_yField ON bTable(yField);
Query OK, 0 rows affected (0.05 sec)
Records: 0  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM aTable WHERE aField in (SELECT xField FROM bTable WHERE yField > 5);
+--------+-------+
| aField | aMore |
+--------+-------+
|      1 | One   |
|      3 | Three |
+--------+-------+
2 rows in set (0.00 sec)

mysql> SELECT * FROM aTable WHERE (SELECT yField FROM bTable WHERE aTable.aField = bTable.xField) > 5;
+--------+-------+
| aField | aMore |
+--------+-------+
|      1 | One   |
|      3 | Three |
+--------+-------+
2 rows in set (0.00 sec)

