Lógica ternária¶
Como especificado no padrão SQL, lógica ternária, ou lógica de três valores (3VL), é um sistema lógico com três valores de verdade: TRUE, FALSE e UNKNOWN. No Snowflake, UNKNOWN é representado por NULL. A lógica ternária se aplica à avaliação de expressões boolianas, bem como de predicados, e afeta os resultados de operações lógicas como AND, OR e NOT:
Quando usado em expressões (por exemplo, em uma lista SELECT), os resultados UNKNOWN são retornados como valores NULL.
Quando usado como um predicado (por exemplo, em uma cláusula WHERE), os resultados de UNKNOWN são avaliados como FALSE.
Neste tópico:
Tabelas de verdades¶
Esta seção descreve as tabelas de verdades para os operadores de comparação e lógica.
Operadores de comparação¶
Se qualquer operando para um operador de comparação é NULL, o resultado é NULL. Os operadores e as funções de comparação são:
Operadores lógicos¶
Dada uma coluna BOOLEAN C
:
Se |
|
|
|
---|---|---|---|
TRUE |
NULL |
TRUE |
FALSE |
FALSE |
FALSE |
NULL |
TRUE |
NULL |
NULL |
NULL |
NULL |
Além disso:
Se |
|
|
|
---|---|---|---|
TRUE |
FALSE |
TRUE |
FALSE |
FALSE |
FALSE |
TRUE |
NULL |
NULL |
NULL |
NULL |
NULL |
Notas de uso para expressões condicionais¶
Esta seção descreve o comportamento específico das expressões condicionais.
Comportamento de IFF¶
IFF retorna os seguintes resultados para a lógica ternária. Dada uma coluna BOOLEAN C
:
Se |
|
---|---|
TRUE |
|
FALSE |
|
NULL |
|
Comportamento [ NOT ] IN¶
[ NOT ] IN retorna os seguintes resultados para a lógica ternária. Dadas as 3 colunas numéricas c1
, c2
e c3
:
c1 IN (c2, c3, ...)
é sintaticamente equivalente a(c1 = c2 OR c1 = c3 OR ...)
.Como resultado, quando o valor
c1
é NULL, a expressãoc1 IN (c2, c3, NULL)
sempre avalia como NULL.c1 NOT IN (c2, c3, ... )
é sintaticamente equivalente a(c1 <> c2 AND c1 <> c3 AND ...)
.Portanto, mesmo se
c1 NOT IN (c2, c3)
for TRUE,c1 NOT IN (c2, c3, NULL)
avalia como NULL.