![]() | |
![]() |
| | Thread Tools | Display Modes |
#11
| |||
| |||
|
|
On Thu, 29 Mar 2007 18:08:00 -0700, Ed Murphy wrote: --CELKO-- wrote: All data types have to be NULL-able in SQL. Having a BOOLEAN type would lead to 4 valued logic with inconsistent rules about how NULLs propagate. And the various vendor extension do not work or port either. It seems like dropping UNKNOWN would leave a sensible set of rules: and | T N F or | T N F not | ----+------ ---+------ ----+-- T | T N F T | T T T T | F N | N N F N | T N N N | N F | F F F F | T N F F | T Am I overlooking anything? Hi Ed, You've overlooked the basic rule of NULL propagation: any expression involving NULL results in NULL. In the tables above, there are exceptions to this rule, such as NULL AND FALSE resulting in FALSE, and TRUE OR NULL resulting in TRUE. |
#12
| |||
| |||
|
|
It seems like dropping UNKNOWN would leave a sensible set of rules: |
#13
| |||
| |||
|
|
It seems like dropping UNKNOWN would leave a sensible set of rules: and | T N F or | T N F not | ----+------ ---+------ ----+-- T | T N F T | T T T T | F N | N N F N | T N N N | N F | F F F F | T N F F | T Am I overlooking anything? The NULL propagation rule. and | T N F or | T N F not | ----+------ ---+------ ----+-- T | T N F T | T N T T | F N | N N N N | N N N N | N F | F N F F | T N F F | T This means that TRUE OR NULL = NULL, etc. and you can now prove that TRUE = FALSE. The UNKNOWN logical value does not have this behavior and that is why we have it. |
![]() |
| Thread Tools | |
| Display Modes | |
| |