Conciso, rápido (especialmente com muitas linhas), o meu favorito em relação à legibilidade e também funcionaria com dupes:
SELECT count(*) = 1 AND min(val) = 1 FROM foo;
Retorna TRUE/ FALSE.. ou NULL- apenas no caso de exatamente uma linha com val IS NULL, porque count()nunca retorna NULLou nenhuma linha.
O segundo 1no exemplo é o mesmo que o primeiro, por causa do seu exemplo.
A consulta na pergunta falha com NULLvalores. Considere a demonstração simples:
CREATE TABLE foo (id int, val int);
INSERT INTO foo VALUES (1, 1),(2, NULL);
SELECT 'yes'
WHERE EXISTS(SELECT * FROM foo WHERE val = 1)
AND NOT EXISTS(SELECT * FROM foo WHERE val <> 1);
IS DISTINCT FROMcorrigiria isso, mas ainda assim poderia falhar com duplicatas val- as quais você descartou neste caso.
Sua resposta funciona bem.
Retorna 'yes'/ sem linha.
Eu preferiria essa forma mais curta, no entanto. Não esqueça que o PostgreSQL (ao contrário do Oracle) tem um booleantipo apropriado .
SELECT array_agg(val) = array[1] FROM foo;
Retorna TRUE/ FALSE/ NULL.