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 booleanas, bem como de predicados, e afeta os resultados de operações lógicas como AND, OR e NOT:
Quando usada em expressões (por exemplo, lista SELECT), resultados UNKNOWN são retornados como valores NULL.
Quando usada como um predicado (por exemplo, cláusula WHERE), resultados 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 de comparação são:
Operadores de lógica¶
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 seguintes expressões condicionais.
Comportamento IFF¶
A função IFF retorna os seguintes resultados para a lógica ternária. Dada uma coluna BOOLEAN C
:
Se |
|
---|---|
TRUE |
|
FALSE |
|
NULL |
|
Comportamento [ NOT ] IN¶
As funções [ NOT ] IN retornam 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 FALSE.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.