- Categorias:
IS [ NOT ] DISTINCT FROM¶
Compara se duas expressões são iguais (ou não iguais). A função é NULL-safe, ou seja, trata NULLs como valores conhecidos para comparar a igualdade. Observe que isso é diferente do EQUAL operador de comparação (=
), que trata NULLs como valores desconhecidos.
- Consulte também:
Sintaxe¶
<expr1> IS [ NOT ] DISTINCT FROM <expr2>
Notas de uso¶
O valor retornado depende se algum dos inputs são valores NULL:
- Retorna TRUE:
<nulo> IS NOT DISTINCT FROM <nulo>
<nulo> IS DISTINCT FROM <não_nulo>
<não_nulo> IS DISTINCT FROM <nulo>
- Retorna FALSE:
<nulo> IS DISTINCT FROM <nulo>
<nulo> IS NOT DISTINCT FROM <não_nulo>
<não_nulo> IS NOT DISTINCT FROM <nulo>
Caso contrário:
<expr1> IS DISTINCT FROM <expr2>
é equivalente a<expr1> != <expr2>
<expr1> IS NOT DISTINCT FROM <expr2>
é equivalente a<expr1> = <expr2>
Para obter mais detalhes, consulte os exemplos abaixo.
Exemplos¶
Criar uma tabela com dados simples:
CREATE OR REPLACE TABLE x (i number); INSERT INTO x values (1), (2), (null);
Mostrar o produto cartesiano gerado ao unir a tabela a si mesma sem filtro:
SELECT x1.i x1_i, x2.i x2_i FROM x x1, x x2 ORDER BY x1.i, x2.i; +------+------+ | X1_I | X2_I | |------+------| | 1 | 1 | | 1 | 2 | | 1 | NULL | | 2 | 1 | | 2 | 2 | | 2 | NULL | | NULL | 1 | | NULL | 2 | | NULL | NULL | +------+------+
Linhas de retorno que contenham:
Somente valores iguais para as duas colunas.
Somente valores iguais ou valores NULL para as duas colunas.
SELECT x1.i x1_i, x2.i x2_i FROM x x1, x x2 WHERE x1.i=x2.i; +------+------+ | X1_I | X2_I | |------+------| | 1 | 1 | | 2 | 2 | +------+------+SELECT x1.i x1_i, x2.i x2_i FROM x x1, x x2 WHERE x1.i IS NOT DISTINCT FROM x2.i ORDER BY x1.i; +------+------+ | X1_I | X2_I | |------+------| | 1 | 1 | | 2 | 2 | | NULL | NULL | +------+------+
Ilustrar todos os resultados possíveis para:
EQUAL
=
e NOT EQUAL<>
IS NOT DISTINCT FROM e IS DISTINCT FROM
SELECT x1.i x1_i, x2.i x2_i, x1.i=x2.i, iff(x1.i=x2.i, 'Selected', 'Not') "SELECT IF X1.I=X2.I", x1.i<>x2.i, iff(not(x1.i=x2.i), 'Selected', 'Not') "SELECT IF X1.I<>X2.I" FROM x x1, x x2; +------+------+-----------+---------------------+------------+----------------------+ | X1_I | X2_I | X1.I=X2.I | SELECT IF X1.I=X2.I | X1.I<>X2.I | SELECT IF X1.I<>X2.I | |------+------+-----------+---------------------+------------+----------------------| | 1 | 1 | True | Selected | False | Not | | 1 | 2 | False | Not | True | Selected | | 1 | NULL | NULL | Not | NULL | Not | | 2 | 1 | False | Not | True | Selected | | 2 | 2 | True | Selected | False | Not | | 2 | NULL | NULL | Not | NULL | Not | | NULL | 1 | NULL | Not | NULL | Not | | NULL | 2 | NULL | Not | NULL | Not | | NULL | NULL | NULL | Not | NULL | Not | +------+------+-----------+---------------------+------------+----------------------+SELECT x1.i x1_i, x2.i x2_i, x1.i IS NOT DISTINCT FROM x2.i, iff(x1.i IS NOT DISTINCT FROM x2.i, 'Selected', 'Not') "SELECT IF X1.I IS NOT DISTINCT FROM X2.I", x1.i IS DISTINCT FROM x2.i, iff(x1.i IS DISTINCT FROM x2.i, 'Selected', 'Not') "SELECT IF X1.I IS DISTINCT FROM X2.I" FROM x x1, x x2 ORDER BY x1.i, x2.i; +------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------+ | X1_I | X2_I | X1.I IS NOT DISTINCT FROM X2.I | SELECT IF X1.I IS NOT DISTINCT FROM X2.I | X1.I IS DISTINCT FROM X2.I | SELECT IF X1.I IS DISTINCT FROM X2.I | |------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------| | 1 | 1 | True | Selected | False | Not | | 1 | 2 | False | Not | True | Selected | | 1 | NULL | False | Not | True | Selected | | 2 | 1 | False | Not | True | Selected | | 2 | 2 | True | Selected | False | Not | | 2 | NULL | False | Not | True | Selected | | NULL | 1 | False | Not | True | Selected | | NULL | 2 | False | Not | True | Selected | | NULL | NULL | True | Selected | False | Not | +------+------+--------------------------------+------------------------------------------+----------------------------+--------------------------------------+