Ah cierto, de la primera forma se realiza un producto cruzado entre $id y todos las hileras de categoria, aunque en su ejemplo solo tiene una categoría al parecer. También deberías poder hacer:
Aunque en mi opinión es mejor si vas por la segunda proposición de HdM.
Esto todavía no explica porque tienes registros duplicados en tus resultados. Si tu tienes resultados tal cuales lo has mostrado en tu imagen, no deberías tener resultados duplicados.
DISTINCT opera sobre las hileras de tus resultados. Supongamos que tienes 2 tablas A y B con un solo campo.
Si tu haces:
Acabas con una tabla asi:
Si tu usas DISTINCT aquí, acabarás con la misma tabla, porque cada uno de los registros de la tabla es único. Si tuvieras una tabla así:
E hicieras la misma consulta tendrías:
Si usarás DISTINCT para los resultados de esta consulta acabarías con:
Por eso mismo dije que lo mencionado hasta ahorita no explica el resultado de tu tabla, porque los resultados que muestras son idénticos y reducibles por DISTINCT. La única forma para la cual tendrías estos valores duplicados sería que los otros valores de las columnas que no muestras son diferentes.
Por ejemplo, veo ahí un campo IDGALERIA que no estoy seguro si sea o no único. Si el campo es un identificador que se auto incrementa por cada registro seleccionar ese campo va a producir que cada hilera sea diferente (por ende DISTINCT no los descarta).
Código (sql) [Seleccionar]
ON galerias.NOMBRECATEGORIA = '$id' AND categoria.NOMBRE_CATEGORIA = '$id'
Aunque en mi opinión es mejor si vas por la segunda proposición de HdM.
Esto todavía no explica porque tienes registros duplicados en tus resultados. Si tu tienes resultados tal cuales lo has mostrado en tu imagen, no deberías tener resultados duplicados.
DISTINCT opera sobre las hileras de tus resultados. Supongamos que tienes 2 tablas A y B con un solo campo.
Código [Seleccionar]
A | B
--------
1 | 2
| 3
| 4
| 5
| 6
Si tu haces:
Código (sql) [Seleccionar]
SELECT * FROM A INNER JOIN B -- INNER JOIN se vuelve CROSS JOIN
Acabas con una tabla asi:
Código [Seleccionar]
-------
|1 | 2|
-------
|1 | 3|
-------
|1 | 4|
-------
|1 | 5|
-------
|1 | 6|
-------
Si tu usas DISTINCT aquí, acabarás con la misma tabla, porque cada uno de los registros de la tabla es único. Si tuvieras una tabla así:
Código [Seleccionar]
A | B
--------
1 | 1
| 1
| 1
| 1
| 1
E hicieras la misma consulta tendrías:
Código [Seleccionar]
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------
|1 | 1|
-------
Si usarás DISTINCT para los resultados de esta consulta acabarías con:
Código [Seleccionar]
-------
|1 | 1|
-------
Por eso mismo dije que lo mencionado hasta ahorita no explica el resultado de tu tabla, porque los resultados que muestras son idénticos y reducibles por DISTINCT. La única forma para la cual tendrías estos valores duplicados sería que los otros valores de las columnas que no muestras son diferentes.
Por ejemplo, veo ahí un campo IDGALERIA que no estoy seguro si sea o no único. Si el campo es un identificador que se auto incrementa por cada registro seleccionar ese campo va a producir que cada hilera sea diferente (por ende DISTINCT no los descarta).