Three-Valued Logic
Autor: Profº Paulo Kaupa
A comparação na Cláusula WHERE pode resultar em três valores diferentes True, False ou Uknown. Exemplo:
Temos uma tabela de Funcionários e queremos filtrar aqueles que tem filhos, os Funcionários são identificado por uma FLAG que pode conter ‘S’ indicando que o colaborador tem filhos, ‘N’ para colaboradores que não tem filhos ou pode não ser preenchida (NULL) , assim em uma consulta (SELECT NOME_FUNCIONARIO FROM TB_FUNCIONARIO WHERE FLAG_FILHOS = ‘S’) onde deseja-se retornar Colaboradores com filhos, pode-se obter os seguintes resultados:
- Quando a coluna FLAG for igual a ‘S’ será retornado TRUE;
- Quando a coluna FLAG for igual a ‘N’ será retornado FALSE;
- Quando a coluna FLAG for igual a NULL será retornado Uknown;
Exemplo:
Analise os seguintes registros inseridos na TB_ALUNO:
Com a execução do script a seguir:
SELECT * FROM TB_ALUNO
WHERE ESTADO = 'SP'
O resultado exibe o registro que atendeu (TRUE) ao predicado. No Script a seguir espera-se que o retorno seja tudo o que for diferente de ‘SP’.
SELECT * FROM TB_ALUNO
WHERE ESTADO <> 'SP'
Com uma análise do resultado da consulta, pode-se identificar que apenas o Estado ‘RJ’ foi retornado embora exista um outro registro:
O predicado <> retorna o que for diferente de ‘SP’, esta informação é processada como verdadeira, o que for igual a ‘SP’ será descartada, pois, não atende ao critério. Para o terceiro registro é retornado UKNOWN (Desconhecido) que também não será retornado.
Nota: NULL é considerado ausência de valor, quando NULL é encontrado o predicado entende como valor desconhecido (UKNOWN).
Obs.: Apenas o que for verdadeiro será retornado, False ou Uknown são serão retornados na consulta.
Caso seja necessário retornar todos os registros que não são do estado de ‘SP’ deve-se usar a seguinte Consulta:
SELECT * FROM TB_ALUNO
WHERE ESTADO <> 'SP' OR ESTADO IS NULL
O estudo do Three-Valued Logic proporciona um melhor entendimento do funcionamento dos predicados, bem como melhora a análise de resultados obtidos nas consultas SQL.