Primero, cometes un fallo general, haces un left join pero luego en el where dice que tabla_del_left_join.id is not null, esto es como hacer un inner join pero perdiendo eficiencia.
prueba esta select (puede que falle algo, la he hecho corriendo)
Código:
select *
from muestra
join ensayo_muestra ON ensayo_muestra.muestraid = muestra.muestraid
left join actas_archivo ON actas_archivo.ensayo_muestraid = ensayo_muestra.ensayo_muestraid
where ensayo_muestra.inactivo IS NULL
and (acta_clase != 1 or acta_clase is not null)
y me comentas si los resultados son los mismos que
Cita: SELECT * FROM muestra
LEFT OUTER JOIN (SELECT DISTINCT ensayo_muestra.muestraid
FROM ensayo_muestra WHERE ensayo_muestra.inactivo IS NULL
EXCEPT
SELECT DISTINCT ensayo_muestra.muestraid
FROM ensayo_muestra
JOIN actas_archivo ON actas_archivo.ensayo_muestraid = ensayo_muestra.ensayo_muestraid
WHERE (acta_clase = 1 OR acta_clase IS NULL)
)sin_actas ON sin_actas.muestraid = muestra.muestraid
WHERE sin_actas.muestraid IS NOT NULL
Como la cosa se está complicando, muestra la estructura de las tablas indicadas, dime donde tiene FK, etc...
Cita: Las variables llevan valor 1 ó 0 en función de un checkbox
Porque no utilizas un boolean?
Cita: De momento creo que voy a soñar con esta query
No será la última vez... xD
Salu2