Atualmente, a Microsoft permite essa sintaxe.
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
Observe que não há GROUP BY
na EXISTS
cláusula, é esse ANSI SQL válido. Ou é apenas expor um detalhe de implementação.
Para referência, essa mesma sintaxe não é permitida no PostgreSQL.
ERRO: a coluna "tx" deve aparecer na cláusula GROUP BY ou ser usada em uma função agregada
Mas essa sintaxe é permitida ..
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT 1 -- This changed from the first query
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
HAVING count(*) > 1
);
E essa sintaxe é permitida.
SELECT *
FROM ( VALUES (1) ) AS g(x)
WHERE EXISTS (
SELECT *
FROM ( VALUES (1),(1) )
AS t(x)
WHERE g.x = t.x
GROUP BY t.x -- This changed from the first query
HAVING count(*) > 1
);
Pergunta surge de uma conversa com @ErikE no chat
fonte