Hasta un poco de vergüenza me da preguntar lo siguiente, porque aunque no soy ningún maestro sí que llevo años utilizando MySQL y otras bases de datos y hasta ahora no me había surgido nada así...
La siguiente combinación da el resultado mostrado en la imagen bajo ella (muestra todos los registros bien relacionados):
Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia from personas per, provincias pro where ( (per.idprovincia = pro.idprovincia) );

Pero la siguiente sentencia falla (deberían realizarse las condiciones sobre los datos resultantes de la combinación):
Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia from personas per, provincias pro where ( (per.idprovincia = pro.idprovincia) AND (pro.provincia = 'LAS PALMAS') OR (pro.idprovincia = 5) );

Sin embargo, del siguiente modo va perfecta (agrupando las condiciones entre paréntesis):
Código:
select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia from personas per, provincias pro where ( (per.idprovincia = pro.idprovincia) AND ( (pro.provincia = 'LAS PALMAS') OR (pro.idprovincia=5) ) );

No termino de entender el por qué, nunca me había encontrado con algo así, incluso por si estaba confundido he vuelto a repasar ejercicios de hace años en que lo estudié... y están igual que lo indicado en el primer modo (sin necesidad de agrupar las condiciones tras la combinación).
Conozco los JOIN aunque por costumbre no los uso. La siguiente sentencia funciona bien:
Código:
Las tablas son InnoDB con sus claves foráneas y demás.select per.idpersona, per.nombre, per.idprovincia, pro.idprovincia, pro.provincia from personas per INNER JOIN provincias pro ON (per.idprovincia = pro.idprovincia) where ( (pro.provincia = 'LAS PALMAS') OR (pro.idprovincia = 5) );
Agradecería mucho una explicación dado que por más vueltas que le doy y por más material que repaso no doy con la solución.
PD: creo que me hago viejo
