Esta seção descreve várias construções especializadas para fazer comparações múltiplas entre grupos de valores. Estas formas são relacionadas sintaticamente com as formas das subconsultas da seção anterior, mas não envolvem subconsultas. As formas envolvendo subexpressões de matrizes são extensões do PostgreSQL; o restante está em conformidade com o padrão SQL. Todas a formas de expressão documentadas nesta seção retornam resultados booleanos (verdade/falso).
expressão IN (valor[, …])
O lado direito é uma lista de expressões escalares entre parênteses. O resultado é "verdade" se o resultado da expressão à esquerda for igual a qualquer uma das expressões à direita. Esta é uma notação abreviada de
expressão = valor1 OR expressão = valor2 OR …
Deve ser observado que, se o resultado da expressão do lado esquerdo for nulo, ou se não houver valor igual do lado direito e pelo menos uma expressão do lado direito tiver resultado nulo, o resultado da construção IN será nulo, e não falso. Isto está de acordo com as regras normais do SQL para combinações booleanas de valores nulos.
expressão NOT IN (valor[, …])
O lado direito é uma lista de expressões escalares entre parênteses. O resultado é "verdade" se o resultado da expressão à esquerda for diferente do resultado de todas as expressões à direita. Esta é uma notação abreviada de
expressão <> valor1 AND expressão <> valor2 AND …
Deve ser observado que, se o resultado da expressão do lado esquerdo for nulo, ou se não houver valor igual do lado direito e pelo menos uma expressão do lado direito tiver resultado nulo, o resultado da construção NOT IN será nulo, e não verdade. Isto está de acordo com as regras normais do SQL para combinações booleanas de valores nulos.
Dica: x NOT IN y equivale a NOT (x IN y) para todos os casos. Entretanto, os valores nulos tem muito mais facilidade de confundir um novato trabalhando com NOT IN do que trabalhando com IN. É melhor expressar a condição na forma positiva se for possível.
expressão operador ANY (expressão_de_matriz) expressão operador SOME (expressão_de_matriz)
O lado direito é uma expressão entre parênteses, que deve produzir um valor matriz. A expressão do lado esquerdo é processada e comparada com cada elemento da matriz utilizando o operador especificado, que deve produzir um resultado booleano. O resultado de ANY é "verdade" se for obtido algum resultado verdade. O resultado é "falso" se não for obtido nenhum resultado verdade (incluindo o caso especial onde a matriz possui zero elementos).
SOME é sinônimo de ANY.
expressão operador ALL (expressão_de_matriz)
O lado direito é uma expressão entre parênteses, que deve produzir um valor matriz. A expressão do lado esquerdo é processada e comparada com cada elemento da matriz utilizando o operador especificado, que deve produzir um resultado booleano. O resultado de ALL é "verdade" se o resultado de todas as comparações for verdade (incluindo o caso especial onde a matriz possui zero elementos). O resultado é "falso" se for encontrado algum resultado falso.
(expressão [, expressão …]) operador (expressão [, expressão …])
Cada lado é uma lista de expressões escalares; as duas listas devem ter o mesmo comprimento. Cada lado é processado e depois comparados por toda a largura da linha. Atualmente, somente os operadores = e <> são permitidos nas comparações por toda a largura da linha. O resultado é "verdade" se as duas linhas forem iguais ou diferentes, respectivamente.
Como usual, os valores nulos nas linhas são combinados conforme as regras normais do SQL para expressões booleanas. Duas linhas são consideradas iguais se todos os seus membros correspondentes forem não nulos e iguais; as linhas não são iguais se algum membro correspondente for não nulo e for diferente; caso contrário, o resultado da comparação da linha é desconhecido (nulo).