print @T & @F
Devoluções 0
&
é o operador Bitwise AND .
O operador & bit a bit executa um AND lógico bit a bit entre as duas expressões, utilizando cada bit correspondente para ambas as expressões. Os bits no resultado são definidos como 1 se e somente se os dois bits (para o bit atual que está sendo resolvido) nas expressões de entrada tiverem o valor 1; caso contrário, o bit no resultado será definido como 0.
No seu caso, @T & @F
resolve 1 & 0
e retorna um resultado do tipo de dados BIT
com valor0
Quando passado para o PRINT
operador, esse bit
resultado é convertido implicitamente em string e a saída do resultado para o cliente.
print @T and @F
Tem muito errado com isso.
AND
Combina duas expressões booleanas e retorna TRUE quando ambas as expressões são TRUE
bit
não é o mesmo que booleano. Eles não são intercambiáveis e o SQL Server não será convertido implicitamente bit
em um tipo de dados booleano quando necessário (o SQL Server não implementa o tipo de dados booleano do SQL).
Então você precisaria usar uma expressão como
@T = 'TRUE' AND @F = 'TRUE'
ao invés de
@T and @F
Mesmo assim, seus problemas não terminaram - PRINT
não aceita uma expressão booleana. Você pode usar a expressão CASE
como abaixo.
PRINT CASE
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic
END