El problema puede deberse a que usas a coma (,) en el FROM, lo que equivale a un NATURAL JOIN, y esto genera un
producto cartesiano en alguna de las combinaciones.
En este sentido
es siempre preferible usar INNER JOIN, LEFT JOIN o RIGHT JOIN, según se necesite, definiendo cuáles son los campos de relación. JOIN lo que hace
es tratar de igualar todos los campos que lleven el mismo nombre en las tablas sometidas a la junta. Como esto puede ser que intente igualar campos del mismo nombre
pero con contenidos distintos entre tablas, se produce el error.
El hecho de poner los campos de relación en el WHERE
no es suficiente, no solamente porque
MySQL no puede optimizar el WHERE, sino porque eso
no te asegura que no haya habido duplicación de registros, ya que si el campo pivotado no es el ID que pusiste, l
a duplicación cumple de todos modos con el WHERE tal y como lo planteas.
Resumiendo:
Lo que debes hacer es:
Código sql:
Ver originalSELECT *
FROM inmuebles INNER JOIN inmuebles_claves USING(idinmueble) inmuebles_descripciones
INNER JOIN inmuebles_tipos USING(idinmueble)
INNER JOIN tipos,inmuebles_poblaciones USING(idinmueble)
INNER JOIN poblaciones USING(idinmueble)
INNER JOIN inmuebles_zonas USING(idinmueble)
WHERE inmuebles.idcliente = 2 AND inmuebles.activo =1;
ORDER BY inmuebles.precio
La cláusula USING funciona como el ON campo1 = campo2 cuand los campos en ambas tablas tienen el mismo nombre.