Rinnegan:
¿Por qué prefieres la vieja sintaxis? Es muy proclive a los errores sobretodo en los outer joins. En tu consulta tienes una completa contradiccion:
Código:
WHERE DOM.Id_dominio = LU.Id_dominio
AND DOM.Id_dominio NOT IN (SELECT Id_dominio FROM eMailF_Leidos_Unicos)
Es una contradiccion porque sintacticamente el NOT IN es equivalente a poner una serie de condiciones con <>. Por lo tanto tu query no devolverá nada ya que equivale a decir que DOM.Id_dominio = eMailF_Leidos_Unicos.Id_dominio y ademas DOM.Id_dominio es distinto de cada un de los valores devueltos por el subquery que trae los valores de eMailF_Leidos_Unicos.
Gabo77: Normalmente el exists y not exists son la elección acertada para discriminar rapidamente valores entre dos conjuntos, pero aquí hay también un error. En el query original de artcevise una de las condiciones de sus joins es:
Código:
eMailF_FechasLectura AS FL ON FL.id_leido_unico = LU.id_leido_unico
Sin embargo tu not exists tiene una condición completamente diferente:
Código:
And Not Exists(
Select 1
From eMailF_FechasLectura FL
Where D.Id_Dominio = FL.Id_Dominio
El query dentro de la condición not exists debe ser el join de las dos tablas con los registros que quiere excluir:
Código:
SELECT D.Id_Dominio,
COUNT(D.Id_Dominio) AS Suma
FROM EMailF_Dominios AS D
WHERE NOT EXISTS(
SELECT 1
FROM eMailF_Leidos_Unicos AS LU
INNER JOIN eMailF_FechasLectura AS FL
ON FL.id_leido_unico = LU.id_leido_unico
WHERE D.Id_Dominio = LU.id_dominio
)
GROUP BY D.Id_Dominio
ORDER BY suma
A partir del query original un simple cambio en el tipo de join resuelve el problema:
Código:
SELECT DOM.Id_dominio,
COUNT(DOM.id_dominio) suma
FROM eMailF_Dominios AS DOM
LEFT JOIN eMailF_Leidos_Unicos AS LU
INNER JOIN eMailF_FechasLectura AS FL
ON FL.id_leido_unico = LU.id_leido_unico
ON DOM.id_dominio = LU.id_dominio
WHERE LU.id_dominio IS NULL
GROUP BY DOM.id_dominio
ORDER BY suma
Sin ambargo, sin conocer más sobre los índices de las tablas, me inclinaría por el query con NOT EXISTS.