Yo, por más que reviso la consulta no veo problemas de lógica (fuera de no usar funciones específicas en algunas partes), por lo que sugeriría un experimento.
Dinos qué es lo que devuelve cada una de las siguientes consultas, para ver si detectamos a partir de qué punto los resultados son incorrectos:
Consulta 1:
Código MySQL:
Ver original E.artista,
E.tipo,
E.titulo,
E.fecha_inicio,
E.fecha_fin,
E.hasta,
E.nombre_sala_ex,
E.thumbnail,
E.url,
E.preludio,
S.pueblo,
S.zona
exposiciones E
INNER JOIN salasexposiciones S
ON E.nombre_sala_ex
= S.nombre_sala_ex
S.zona = 'Jaén'
Consulta 2:
Código MySQL:
Ver original E.artista,
E.tipo,
E.titulo,
E.fecha_inicio,
E.fecha_fin,
E.hasta,
E.nombre_sala_ex,
E.thumbnail,
E.url,
E.preludio,
S.pueblo,
S.zona
exposiciones E
INNER JOIN salasexposiciones S
ON E.nombre_sala_ex
= S.nombre_sala_ex
S.zona = 'Jaén'
Consulta 3:
Código MySQL:
Ver original E.artista,
E.tipo,
E.titulo,
E.fecha_inicio,
E.fecha_fin,
E.hasta,
E.nombre_sala_ex,
E.thumbnail,
E.url,
E.preludio,
S.pueblo,
S.zona
exposiciones E
INNER JOIN salasexposiciones S
ON E.nombre_sala_ex
= S.nombre_sala_ex
S.zona = 'Jaén'
Consulta 4:
Código MySQL:
Ver original E.artista,
E.tipo,
E.titulo,
E.fecha_inicio,
E.fecha_fin,
E.hasta,
E.nombre_sala_ex,
E.thumbnail,
E.url,
E.preludio,
S.pueblo,
S.zona
exposiciones E
INNER JOIN salasexposiciones S
ON E.nombre_sala_ex
= S.nombre_sala_ex
S.zona = 'Jaén'
Este tipo de pruebas lo suelo hacer cuando algún problema de lógica se escapa a la observación de la consulta. Muchas veces tiene que ver con la forma en que MySQL realiza el parseo y que no podemos detectar a simple vista.