Código sql:
Ver originalSELECT *
FROM productos
WHERE
((talla_s> 0 OR talla_s<3) OR
(talla_m> 0 OR talla_m<4) OR
(talla_l > 0 OR talla_l<4) OR
(talla_xl>0 OR talla_xl<3))
AND catalogo='temporada'
AND catalogo='rebajado'
ORDER BY marca, nombre;
El tema pasa porque el funcionamiento de una cadena de condiciones como esa hace que el AND funcione como operador contra la condición anterior, pero no contra todas las condiciones precedentes.
En casos con condiciones encadenadas así, debes analizar bien cuáles se deben considerar como una unidad lógica y cuáles no.
La proposicion que escribí hace que el valor del rango de talles se considere como unidad lógica, y sólo devolverá registros si una de las comparaciones es TRUE y las dependiendes de los AND también.
¿Se comrepende?