- Categorias:
[ NOT ] IN¶
Testa se seu argumento é ou não um dos membros de uma lista explícita ou o resultado de uma subconsulta.
Nota
Na forma de subconsulta, IN é equivalente a = ANY e NOT IN é equivalente a <> ALL.
Dica
Você pode usar o serviço de otimização de pesquisa para melhorar o desempenho de consultas que chamam essa função. Para obter mais detalhes, consulte Serviço de otimização de pesquisa.
Sintaxe¶
Para comparar valores individuais:
Para comparar construtores ROW (listas de valores entre parênteses):
Para comparar um valor com os valores retornados por uma subconsulta:
Parâmetros¶
valueO valor a ser pesquisado.
value_A,value_BOs elementos de um construtor ROW pelos quais procurar.
Certifique-se de que cada valor à direita de IN (por exemplo,
(value3, value4)) tenha o mesmo número de elementos que o valor à esquerda de IN (por exemplo,(value_A, value_B)).value_#Um valor com o qual
valuedeve ser comparado.Se os valores a serem comparados são construtores ROW, então cada
value_#é um elemento individual de um construtor ROW.subqueryUma subconsulta que retorna uma lista de valores aos quais
valuepode ser comparado.
Notas de uso¶
Como na maioria dos contextos, NULL não é igual a NULL. Se
valuefor NULL, o valor de retorno da função será NULL, quer a lista ou subconsulta contenha NULL ou não. Consulte Uso de NULL.Sintaticamente, IN é tratado como um operador e não como uma função. Este exemplo mostra a diferença entre usar IN como um operador e chamar
f()como uma função:Não é possível usar a sintaxe da função com IN. Por exemplo, não se pode reescrever o exemplo anterior como:
IN também é considerado um operador de subconsulta.
Em uma consulta que usa IN, você pode expandir uma matriz em uma lista de valores individuais usando o operador de propagação (
**). Para obter mais informações e exemplos, consulte Operadores de expansão.
Detalhes do agrupamento¶
Arguments with collation specifications currently aren’t supported.
Exemplos¶
Os exemplos a seguir usam a função IN.
Uso de IN com literais simples¶
Os exemplos seguintes mostram como usar IN e NOT IN com literais simples:
Uso de IN com uma subconsulta¶
Este exemplo mostra como usar IN em uma subconsulta.
Uso de IN com uma tabela¶
Estes exemplos mostram como usar IN com uma tabela. A instrução abaixo cria a tabela usada nos exemplos.
Este exemplo mostra como usar IN com uma única coluna de uma tabela:
Este exemplo mostra como usar IN com várias colunas de uma tabela:
Este exemplo mostra como usar IN com uma subconsulta que lê várias colunas de uma tabela:
Uso de NULL¶
Lembre-se de que NULL != NULL. IN e NOT IN Listas que contêm comparações com NULL (incluindo condições de igualdade) pode produzir resultados inesperados porque NULL representa um valor desconhecido. Comparações com NULL não retorne TRUE ou FALSE; eles retornam NULL. Consulte também Lógica ternária.
Por exemplo, a consulta a seguir retorna NULL, não TRUE, porque SQL não pode determinar se NULL é igual a qualquer valor, incluindo outro NULL.
Observe que se você alterar a consulta para selecionar 1, não NULL, ele retorna TRUE:
Neste caso, o resultado é TRUE porque 1 tem uma correspondência no IN lista. O fato de NULL também existe na IN a lista não afeta o resultado.
Da mesma forma, NOT IN Comparações com NULL também retornam NULL se algum valor na lista for NULL.
O mesmo comportamento é verdadeiro para a consulta a seguir, onde o conjunto de valores 4, 5, NULL não corresponde a também 4, 5, NULL ou 7, 8, 9:
O exemplo a seguir mostra o mesmo comportamento com NULL Comparações de, mas usa uma subconsulta para definir a IN Valores de lista que são comparados: