Existe algum significado para o SQL Server ter BIT
datatype em vez de BOOLEAN
? É apenas uma maneira estranha de chamar a mesma coisa, ou existe alguma diferença conceitual sutil?
A documentação sobre BIT
o tipo de dados menciona:
O tipo de dados bit pode ser usado para armazenar valores booleanos.
Isso parece sugerir que, na verdade, elas não são a mesma coisa.
Estou ciente de que [a coisa que a MS chama de boolean] e [a coisa que a MS chama de bit] são diferentes, MAS do ponto de vista do programador, bit
é a melhor aproximação do boolean
conceito platônico que a linguagem T-SQL oferece. E eu luto para acreditar que seja apenas uma casualidade e não uma intenção. O tipo de dado numérico que aceita apenas 0 e 1 parece pouco prático para outros usos.
Eles são completamente diferentes e, até onde sei, são representados como tal no lexing do compilador subjacente.
boolean
é um tipo interno, e há muito poucos lugares onde você pode usá-lo diretamente em T-SQL, a saber, predicadosWHERE
CASE
e . Um booleano é or or (note que not , você obtém para alguns predicados envolvendo nulos).IIF
TRUE
FALSE
UNKNOWN
NULL
UNKNOWN
bit
é um tipo numérico, que representa 0 ou 1 (ouNULL
), e portanto a documentação recomenda usá-lo para armazenar booleanos, por falta de uma opção melhor.A não
bit
é enfaticamente um . Você não pode, por exemplo, escrever , e igualmente não pode usar a diretamente, por exemplo , nem pode definir uma coluna como um .boolean
WHERE SomeBitColumn
boolean
SELECT x <> y
boolean
Você vê
boolean
s aparecerem em vários lugares em planos de consulta. Por exemplo, neste fiddle , onde oCASE
foi transformado emCASE WHEN [Expr1004] THEN (1) ELSE NULL END
.Quanto ao motivo pelo qual o SQL Server só suporta
bit
e nãoboolean
: essa não é realmente uma questão que podemos responder aqui, mas provavelmente porqueboolean
só foi definido mais tarde.bit
na verdade, é suposto ser uma matriz de bits de tamanho fixo ou variável, mas o SQL Server só suporta o que é efetivamentebit(1)
. Você pode verificar a especificação para ANSI SQL-92 para mais informações.