I noticed that when a result includes a BIT type, it converts it to 47 (SYBCHAR), however it completely ignores NULL and concerts it to the character "0". This is a bad scenario since you lose context on whether it was NULL or actually a BIT set to 0.
This behavior is type dependent, since there's a integer-null type 38 (SYBINTN) that handles this for integer values.
There is however a workaround which is to cast the BIT field/column to integer in the query so that freetds treats it as an integer-null.
E.G. CAST([field] AS int) AS [field]
tds_willconvert don't do any conversion and you have to handle NULLs in other way as documented.