Al final lo he solucionado de la siguiente manera:
Código:
SELECT id_persona,
per.nombre,
id_direccion,
dir.tipo_direccion,
dir.direccion
FROM ( SELECT per.id AS id_persona,
per.nombre,
dir.id AS id_direccion,
dir.tipo_direccion,
dir.direccion,
ROW_NUMBER() OVER(PARTITION BY per.id ORDER BY dir.tipo_direccion) AS rn
FROM personas per
INNER JOIN direcciones dir
ON per.id = dir.id_persona) AS t
WHERE t.rn = 1;
No podía usar GROUP BY ya que es en Oracle, no en MySQL. Y no funciona igual