@john_handshake, @sampeterson, and anyone else running into this,
At Looker, we made a deliberate decision very early on to avoid the 3VL problem(EVIL FUZZY LOGIC) with NULLs and asymmetry of results that occur for inverse logical conditions on Booleans. We COALESCE NULLs and automatically treat them as False in order to stay in the simplified 2VL world to avoid confusion for end users(and the assumption that reports were false or inconsistent).
If you need to represent NULLs please use the example @ian demonstrated with strings rather than real NULLs, this guarantees consistency and accuracy of results across different databases and for inverse conditions under the same logical operation.
We will probably never support the pure 3VL world with the yesno type because there's so much code written around it already, it is not a problem that can be solved without creating disparity and confusion amongst most use cases unless the users have extensive knowledge and awareness of relational algebra. I would say that 90-95% of users will not have awareness of what is actually occurring and assume that the report is inaccurate due to 3VL behavior.
We may support a Boolean type one day with the full 3VL behavior in the future, we definitely want to play around with it more and try to figure out how to release it without as much headache that goes with the nuances.