Representar dados booleanos no SQL Server com BIT
Não há um tipo de dados boolean específico no SQL Server. Porém, podemos usar o tipo de dados inteiros BIT para representar dados booleanos quando necessário.
Um campo que utilize o tipo BIT pode armazenar os valores 0, 1 e NULL. O valor 0 pode representar o valor lógico FALSE, enquanto o valor 1 pode representar o valor lógico TRUE. Na prática, qualquer valor numérico atribuído a um campo BIT que não seja 0 será avaliado como 1 (ou seja, TRUE).
Assim, temos os seguintes valores possíveis para um campo BIT:
- 0 = FALSE
- 1 = TRUE
- NULL
Recomenda-se que, ao usarmos o tipo BIT para representar valores lógicos, o campo seja declarado como NOT NULL, para evitar a existência de um estado indefinido para o campo em questão (“lógica de três valores”).
Este tipo de dado é muito empregado para armazenar valores do tipo sim / não, como por exemplo o status de envio de um produto, disponibilidade de um item e outras informações que sejam representadas por valores binários, ocupando muito pouco espaço de armazenamento no banco de dados.
Porém, note que o tipo BIT não é realmente equivalente a um tipo Boolean. Ele se comporta como um tipo integer, porém com o intervalo de valores possíveis restrito a 0 e 1 (e NULL, se não for usada uma restrição NOT NULL ao criar o campo). Caso um valor maior que 1 seja atribuído a um campo BIT, ele será armazenado exatamente com o valor 1, pois qualquer valor diferente de zero será interpretado como um.
Note também que, ao usarmos o tipo BIT em uma coluna, não é possível usar essa coluna em uma expressão que contenha operadores booleanos, como AND e OR.
Exemplo
Vamos criar uma tabela com um campo de bit (booleano) para armazenar a situação de uma pessoa – se ela está aposentada ou não:
CREATE TABLE StatusAP ( Cod INT PRIMARY KEY IDENTITY, Nome VARCHAR(40), Aposentado BIT NOT NULL );
Inserimos alguns dados na tabela para os testes:
INSERT INTO StatusAP VALUES ('João', 1), ('Marta', 0), ('Renan', 0), ('Fábio', 0), ('Ana', 0), ('Amélia', 1);
E então fazemos nossa primeira consulta para saber quais usuários estão aposentados:
SELECT Nome FROM StatusAP WHERE Aposentado = 1;
Resultado:
Também é possível inserir dados em um campo BIT usando as palavras-chave TRUE e FALSE, que são interpretadas respectivamente como os bits 1 e 0 pelo SQL Server. Veja o exemplo:
INSERT INTO StatusAP VALUES ('Renata', 'TRUE'), ('Monica', 'FALSE');
Verificando:
SELECT * FROM StatusAP;
Resultado:
Referências
Microsoft Docs: bit (Transact-SQL)