print @T & @F
& is the Bitwise AND operator.
The & bitwise operator performs a bitwise logical AND between the two
expressions, taking each corresponding bit for both expressions. The
bits in the result are set to 1 if and only if both bits (for the
current bit being resolved) in the input expressions have a value of
1; otherwise, the bit in the result is set to 0.
In your case
@T & @F resolves to
1 & 0 and so returns a result of datatype
BIT with value
When passed to the
PRINT operator this
bit result is implicitly cast to string and the result output to the client.
print @T and @F
Has quite a lot wrong with it.
Combines two Boolean expressions and returns TRUE when both expressions are TRUE
bit is not the same as boolean. They are not interchangeable and SQL Server won't implicitly cast
bit to a boolean datatype when needed (SQL Server does not implement the SQL Boolean datatype.).
So you would need to use an expression like
@T = 'TRUE' AND @F = 'TRUE'
@T and @F
Even then your problems aren't over -
PRINT doesn't accept a boolean expression anyway. You could use the expression in
CASE as below.
WHEN (@T = 'TRUE' AND @F = 'TRUE') THEN 'True'
WHEN NOT (@T = 'TRUE' AND @F = 'TRUE') THEN 'False'
ELSE 'Unknown' -- SQL uses three valued logic