/ Hex Artifact Content
Login

Artifact 4ac1c9bbb8a20a76500d18d63b383f51bb7d8be7:


0000: 23 0a 23 20 52 75 6e 20 74 68 69 73 20 73 63 72  #.# Run this scr
0010: 69 70 74 20 74 6f 20 67 65 6e 65 72 61 74 65 64  ipt to generated
0020: 20 61 20 6e 75 6c 6c 73 2e 68 74 6d 6c 20 6f 75   a nulls.html ou
0030: 74 70 75 74 20 66 69 6c 65 0a 23 0a 73 65 74 20  tput file.#.set 
0040: 72 63 73 69 64 20 7b 24 49 64 3a 20 6e 75 6c 6c  rcsid {$Id: null
0050: 73 2e 74 63 6c 2c 76 20 31 2e 33 20 32 30 30 33  s.tcl,v 1.3 2003
0060: 2f 30 37 2f 30 37 20 30 30 3a 31 30 3a 34 30 20  /07/07 00:10:40 
0070: 64 72 68 20 45 78 70 20 24 7d 0a 0a 70 75 74 73  drh Exp $}..puts
0080: 20 7b 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a   {<html>.<head>.
0090: 3c 74 69 74 6c 65 3e 4e 55 4c 4c 20 48 61 6e 64  <title>NULL Hand
00a0: 6c 69 6e 67 20 49 6e 20 53 51 4c 69 74 65 20 56  ling In SQLite V
00b0: 65 72 73 75 73 20 4f 74 68 65 72 20 44 61 74 61  ersus Other Data
00c0: 62 61 73 65 20 45 6e 67 69 6e 65 73 3c 2f 74 69  base Engines</ti
00d0: 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a 3c 62 6f  tle>.</head>.<bo
00e0: 64 79 20 62 67 63 6f 6c 6f 72 3d 22 77 68 69 74  dy bgcolor="whit
00f0: 65 22 3e 0a 3c 68 31 20 61 6c 69 67 6e 3d 22 63  e">.<h1 align="c
0100: 65 6e 74 65 72 22 3e 0a 4e 55 4c 4c 20 48 61 6e  enter">.NULL Han
0110: 64 6c 69 6e 67 20 69 6e 20 53 51 4c 69 74 65 20  dling in SQLite 
0120: 56 65 72 73 75 73 20 4f 74 68 65 72 20 44 61 74  Versus Other Dat
0130: 61 62 61 73 65 20 45 6e 67 69 6e 65 73 0a 3c 2f  abase Engines.</
0140: 68 31 3e 0a 7d 0a 70 75 74 73 20 22 3c 70 20 61  h1>.}.puts "<p a
0150: 6c 69 67 6e 3d 5c 22 63 65 6e 74 65 72 5c 22 3e  lign=\"center\">
0160: 0a 28 54 68 69 73 20 70 61 67 65 20 77 61 73 20  .(This page was 
0170: 6c 61 73 74 20 6d 6f 64 69 66 69 65 64 20 6f 6e  last modified on
0180: 20 5b 6c 72 61 6e 67 65 20 24 72 63 73 69 64 20   [lrange $rcsid 
0190: 33 20 34 5d 20 55 54 43 29 0a 3c 2f 70 3e 22 0a  3 4] UTC).</p>".
01a0: 0a 70 75 74 73 20 7b 0a 3c 70 3e 0a 54 68 65 20  .puts {.<p>.The 
01b0: 67 6f 61 6c 20 69 73 0a 74 6f 20 6d 61 6b 65 20  goal is.to make 
01c0: 53 51 4c 69 74 65 20 68 61 6e 64 6c 65 20 4e 55  SQLite handle NU
01d0: 4c 4c 73 20 69 6e 20 61 20 73 74 61 6e 64 61 72  LLs in a standar
01e0: 64 73 2d 63 6f 6d 70 6c 69 61 6e 74 20 77 61 79  ds-compliant way
01f0: 2e 0a 42 75 74 20 74 68 65 20 64 65 73 63 72 69  ..But the descri
0200: 70 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 53 51  ptions in the SQ
0210: 4c 20 73 74 61 6e 64 61 72 64 73 20 6f 6e 20 68  L standards on h
0220: 6f 77 20 74 6f 20 68 61 6e 64 6c 65 0a 4e 55 4c  ow to handle.NUL
0230: 4c 73 20 73 65 65 6d 20 61 6d 62 69 67 75 6f 75  Ls seem ambiguou
0240: 73 2e 20 0a 49 74 20 69 73 20 6e 6f 74 20 63 6c  s. .It is not cl
0250: 65 61 72 20 66 72 6f 6d 20 74 68 65 20 73 74 61  ear from the sta
0260: 6e 64 61 72 64 73 20 64 6f 63 75 6d 65 6e 74 73  ndards documents
0270: 20 65 78 61 63 74 6c 79 20 68 6f 77 20 4e 55 4c   exactly how NUL
0280: 4c 73 20 73 68 6f 75 6c 64 0a 62 65 20 68 61 6e  Ls should.be han
0290: 64 6c 65 64 20 69 6e 20 61 6c 6c 20 63 69 72 63  dled in all circ
02a0: 75 6d 73 74 61 6e 63 65 73 2e 0a 3c 2f 70 3e 0a  umstances..</p>.
02b0: 0a 3c 70 3e 0a 53 6f 20 69 6e 73 74 65 61 64 20  .<p>.So instead 
02c0: 6f 66 20 67 6f 69 6e 67 20 62 79 20 74 68 65 20  of going by the 
02d0: 73 74 61 6e 64 61 72 64 73 20 64 6f 63 75 6d 65  standards docume
02e0: 6e 74 73 2c 20 76 61 72 69 6f 75 73 20 70 6f 70  nts, various pop
02f0: 75 6c 61 72 0a 53 51 4c 20 65 6e 67 69 6e 65 73  ular.SQL engines
0300: 20 77 65 72 65 20 74 65 73 74 65 64 20 74 6f 20   were tested to 
0310: 73 65 65 20 68 6f 77 20 74 68 65 79 20 68 61 6e  see how they han
0320: 64 6c 65 20 4e 55 4c 4c 73 2e 20 20 54 68 65 20  dle NULLs.  The 
0330: 69 64 65 61 0a 77 61 73 20 74 6f 20 6d 61 6b 65  idea.was to make
0340: 20 53 51 4c 69 74 65 20 77 6f 72 6b 20 6c 69 6b   SQLite work lik
0350: 65 20 61 6c 6c 20 74 68 65 20 6f 74 68 65 72 20  e all the other 
0360: 65 6e 67 69 6e 65 73 2e 0a 41 20 53 51 4c 20 74  engines..A SQL t
0370: 65 73 74 20 73 63 72 69 70 74 20 77 61 73 20 64  est script was d
0380: 65 76 65 6c 6f 70 65 64 20 61 6e 64 20 72 75 6e  eveloped and run
0390: 20 62 79 20 76 6f 6c 75 6e 74 65 65 72 73 20 6f   by volunteers o
03a0: 6e 20 76 61 72 69 6f 75 73 0a 53 51 4c 20 52 44  n various.SQL RD
03b0: 42 4d 53 65 73 20 61 6e 64 20 74 68 65 20 72 65  BMSes and the re
03c0: 73 75 6c 74 73 20 6f 66 20 74 68 6f 73 65 20 74  sults of those t
03d0: 65 73 74 73 20 77 65 72 65 20 75 73 65 64 20 74  ests were used t
03e0: 6f 20 64 65 64 75 63 65 0a 68 6f 77 20 65 61 63  o deduce.how eac
03f0: 68 20 65 6e 67 69 6e 65 20 70 72 6f 63 65 73 73  h engine process
0400: 65 64 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  ed NULL values..
0410: 41 20 63 6f 70 79 20 6f 66 20 74 68 65 20 74 65  A copy of the te
0420: 73 74 20 73 63 72 69 70 74 20 69 73 20 66 6f 75  st script is fou
0430: 6e 64 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  nd at the end of
0440: 20 74 68 69 73 20 64 6f 63 75 6d 65 6e 74 2e 0a   this document..
0450: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65  </p>..<p>.SQLite
0460: 20 77 61 73 20 6f 72 69 67 69 6e 61 6c 6c 79 20   was originally 
0470: 63 6f 64 65 64 20 69 6e 20 73 75 63 68 20 61 20  coded in such a 
0480: 77 61 79 20 74 68 61 74 20 74 68 65 20 61 6e 73  way that the ans
0490: 77 65 72 20 74 6f 0a 61 6c 6c 20 71 75 65 73 74  wer to.all quest
04a0: 69 6f 6e 73 20 69 6e 20 74 68 65 20 63 68 61 72  ions in the char
04b0: 74 20 62 65 6c 6f 77 20 77 6f 75 6c 64 20 62 65  t below would be
04c0: 20 22 59 65 73 22 2e 20 20 42 75 74 20 74 68 65   "Yes".  But the
04d0: 0a 65 78 70 72 69 6d 65 6e 74 73 20 72 75 6e 20  .expriments run 
04e0: 6f 6e 20 6f 74 68 65 72 20 53 51 4c 20 65 6e 67  on other SQL eng
04f0: 69 6e 65 73 20 73 68 6f 77 65 64 20 74 68 61 74  ines showed that
0500: 20 6e 6f 6e 65 20 6f 66 20 74 68 65 6d 0a 77 6f   none of them.wo
0510: 72 6b 65 64 20 74 68 69 73 20 77 61 79 2e 20 20  rked this way.  
0520: 53 6f 20 53 51 4c 69 74 65 20 77 61 73 20 6d 6f  So SQLite was mo
0530: 64 69 66 69 65 64 20 74 6f 20 77 6f 72 6b 20 74  dified to work t
0540: 68 65 20 73 61 6d 65 20 61 73 0a 4f 72 61 63 6c  he same as.Oracl
0550: 65 2c 20 50 6f 73 74 67 72 65 53 51 4c 2c 20 61  e, PostgreSQL, a
0560: 6e 64 20 44 42 32 2e 20 20 54 68 69 73 20 69 6e  nd DB2.  This in
0570: 76 6f 6c 76 65 64 20 6d 61 6b 69 6e 67 20 4e 55  volved making NU
0580: 4c 4c 73 0a 69 6e 64 69 73 74 69 6e 63 74 20 66  LLs.indistinct f
0590: 6f 72 20 74 68 65 20 70 75 72 70 6f 73 65 73 20  or the purposes 
05a0: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 44 49  of the SELECT DI
05b0: 53 54 49 4e 43 54 20 73 74 61 74 65 6d 65 6e 74  STINCT statement
05c0: 20 61 6e 64 0a 66 6f 72 20 74 68 65 20 55 4e 49   and.for the UNI
05d0: 4f 4e 20 6f 70 65 72 61 74 6f 72 20 69 6e 20 61  ON operator in a
05e0: 20 53 45 4c 45 43 54 2e 20 20 4e 55 4c 4c 73 20   SELECT.  NULLs 
05f0: 61 72 65 20 73 74 69 6c 6c 20 64 69 73 74 69 6e  are still distin
0600: 63 74 0a 69 6e 20 61 20 55 4e 49 51 55 45 20 63  ct.in a UNIQUE c
0610: 6f 6c 75 6d 6e 2e 20 20 54 68 69 73 20 73 65 65  olumn.  This see
0620: 6d 73 20 73 6f 6d 65 77 68 61 74 20 61 72 62 69  ms somewhat arbi
0630: 74 72 61 72 79 2c 20 62 75 74 20 74 68 65 20 64  trary, but the d
0640: 65 73 69 72 65 0a 74 6f 20 62 65 20 63 6f 6d 70  esire.to be comp
0650: 61 74 69 62 6c 65 20 77 69 74 68 20 6f 74 68 65  atible with othe
0660: 72 20 65 6e 67 69 6e 65 73 20 6f 75 74 77 65 69  r engines outwei
0670: 67 68 74 65 64 20 74 68 61 74 20 6f 62 6a 65 63  ghted that objec
0680: 74 69 6f 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a  tion..</p>..<p>.
0690: 49 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 74  It is possible t
06a0: 6f 20 6d 61 6b 65 20 53 51 4c 69 74 65 20 74 72  o make SQLite tr
06b0: 65 61 74 20 4e 55 4c 4c 73 20 61 73 20 64 69 73  eat NULLs as dis
06c0: 74 69 6e 63 74 20 66 6f 72 20 74 68 65 0a 70 75  tinct for the.pu
06d0: 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20 53 45  rposes of the SE
06e0: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20 61 6e  LECT DISTINCT an
06f0: 64 20 55 4e 49 4f 4e 2e 20 20 54 6f 20 64 6f 20  d UNION.  To do 
0700: 73 6f 2c 20 6f 6e 65 20 73 68 6f 75 6c 64 0a 63  so, one should.c
0710: 68 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20  hange the value 
0720: 6f 66 20 74 68 65 20 4e 55 4c 4c 5f 41 4c 57 41  of the NULL_ALWA
0730: 59 53 5f 44 49 53 54 49 4e 43 54 20 23 64 65 66  YS_DISTINCT #def
0740: 69 6e 65 20 69 6e 20 74 68 65 0a 3c 74 74 3e 73  ine in the.<tt>s
0750: 71 6c 69 74 65 49 6e 74 2e 68 3c 2f 74 74 3e 20  qliteInt.h</tt> 
0760: 73 6f 75 72 63 65 20 66 69 6c 65 20 61 6e 64 20  source file and 
0770: 72 65 63 6f 6d 70 69 6c 65 2e 0a 3c 2f 70 3e 0a  recompile..</p>.
0780: 0a 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69  .<p>.The followi
0790: 6e 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74  ng table shows t
07a0: 68 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68  he results of th
07b0: 65 20 4e 55 4c 4c 20 68 61 6e 64 6c 69 6e 67 20  e NULL handling 
07c0: 65 78 70 65 72 69 6d 65 6e 74 73 2e 0a 3c 2f 70  experiments..</p
07d0: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
07e0: 3d 31 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 33  =1 cellpadding=3
07f0: 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c   width="100%">.<
0800: 74 72 3e 3c 74 68 3e 26 6e 62 73 70 26 6e 62 73  tr><th>&nbsp&nbs
0810: 70 3b 3c 2f 74 68 3e 0a 3c 74 68 3e 53 51 4c 69  p;</th>.<th>SQLi
0820: 74 65 3c 2f 74 68 3e 0a 3c 74 68 3e 50 6f 73 74  te</th>.<th>Post
0830: 67 72 65 53 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e  greSQL</th>.<th>
0840: 4f 72 61 63 6c 65 3c 2f 74 68 3e 0a 3c 74 68 3e  Oracle</th>.<th>
0850: 49 6e 66 6f 72 6d 69 78 3c 2f 74 68 3e 0a 3c 74  Informix</th>.<t
0860: 68 3e 44 42 32 3c 2f 74 68 3e 0a 3c 74 68 3e 4d  h>DB2</th>.<th>M
0870: 53 2d 53 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f  S-SQL</th>.<th>O
0880: 43 45 4c 4f 54 3c 2f 74 68 3e 0a 3c 2f 74 72 3e  CELOT</th>.</tr>
0890: 0a 0a 3c 74 72 3e 3c 74 64 3e 41 64 64 69 6e 67  ..<tr><td>Adding
08a0: 20 61 6e 79 74 68 69 6e 67 20 74 6f 20 6e 75 6c   anything to nul
08b0: 6c 20 67 69 76 65 73 20 6e 75 6c 6c 3c 2f 74 64  l gives null</td
08c0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
08d0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
08e0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
08f0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0900: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0910: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0920: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
0930: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
0940: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
0950: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
0960: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
0970: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
0980: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
0990: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
09a0: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
09b0: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
09c0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
09d0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
09e0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
09f0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
0a00: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
0a10: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
0a20: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
0a30: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0a40: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0a50: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0a60: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
0a70: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
0a80: 64 3e 4d 75 6c 74 69 70 6c 79 69 6e 67 20 6e 75  d>Multiplying nu
0a90: 6c 6c 20 62 79 20 7a 65 72 6f 20 67 69 76 65 73  ll by zero gives
0aa0: 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76   null</td>.<td v
0ab0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
0ac0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
0ad0: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
0ae0: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
0af0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
0b00: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
0b10: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
0b20: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
0b30: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
0b40: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
0b50: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
0b60: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
0b70: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
0b80: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
0b90: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
0ba0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
0bb0: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
0bc0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
0bd0: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
0be0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
0bf0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
0c00: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
0c10: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
0c20: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
0c30: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
0c40: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
0c50: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74  a9">Yes</td>.</t
0c60: 72 3e 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73  r>.<tr><td>nulls
0c70: 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e   are distinct in
0c80: 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e   a UNIQUE column
0c90: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0ca0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0cb0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0cc0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
0cd0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
0ce0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
0cf0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
0d00: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
0d10: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
0d20: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
0d30: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
0d40: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0d50: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0d60: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0d70: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
0d80: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64  9a9">No</td>.<td
0d90: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
0da0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
0db0: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
0dc0: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
0dd0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
0de0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
0df0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
0e00: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
0e10: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
0e20: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
0e30: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
0e40: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
0e50: 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64 69  <td>nulls are di
0e60: 73 74 69 6e 63 74 20 69 6e 20 53 45 4c 45 43 54  stinct in SELECT
0e70: 20 44 49 53 54 49 4e 43 54 3c 2f 74 64 3e 0a 3c   DISTINCT</td>.<
0e80: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
0e90: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
0ea0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
0eb0: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20  a9">No</td>.<td 
0ec0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
0ed0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
0ee0: 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22  gcolor="#c7a9a9"
0ef0: 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  >No</td>.<td val
0f00: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
0f10: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
0f20: 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f  lor="#c7a9a9">No
0f30: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0f40: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0f50: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0f60: 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74  ="#c7a9a9">No</t
0f70: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
0f80: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
0f90: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
0fa0: 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a  c7a9a9">No</td>.
0fb0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0fc0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0fd0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
0fe0: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64  9a9">No</td>.<td
0ff0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1000: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1010: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1020: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ">No</td>.</tr>.
1030: 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72  <tr><td>nulls ar
1040: 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20  e distinct in a 
1050: 55 4e 49 4f 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76  UNION</td>.<td v
1060: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1070: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1080: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1090: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
10a0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
10b0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
10c0: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
10d0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
10e0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
10f0: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1100: 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64  "#c7a9a9">No</td
1110: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1120: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1130: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63  ter" bgcolor="#c
1140: 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c  7a9a9">No</td>.<
1150: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1160: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1170: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
1180: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20  a9">No</td>.<td 
1190: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
11a0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
11b0: 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22  gcolor="#c7a9a9"
11c0: 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  >No</td>.<td val
11d0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
11e0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
11f0: 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f  lor="#c7a9a9">No
1200: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
1210: 3c 74 64 3e 22 43 41 53 45 20 57 48 45 4e 20 6e  <td>"CASE WHEN n
1220: 75 6c 6c 20 54 48 45 4e 20 31 20 45 4c 53 45 20  ull THEN 1 ELSE 
1230: 30 20 45 4e 44 22 20 69 73 20 30 3f 3c 2f 74 64  0 END" is 0?</td
1240: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1250: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1260: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1270: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1280: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1290: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
12a0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
12b0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
12c0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
12d0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
12e0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
12f0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1300: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1310: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1320: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1330: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1340: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1350: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1360: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1370: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1380: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1390: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
13a0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
13b0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
13c0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
13d0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
13e0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
13f0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
1400: 64 3e 22 6e 75 6c 6c 20 4f 52 20 74 72 75 65 22  d>"null OR true"
1410: 20 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a 3c 74   is true</td>.<t
1420: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1430: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1440: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1450: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1460: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1470: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1480: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1490: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
14a0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
14b0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
14c0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
14d0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
14e0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
14f0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1500: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1510: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1520: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1530: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1540: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1550: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1560: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1570: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1580: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1590: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
15a0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
15b0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
15c0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
15d0: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e  </tr>.<tr><td>"n
15e0: 6f 74 20 28 6e 75 6c 6c 20 41 4e 44 20 66 61 6c  ot (null AND fal
15f0: 73 65 29 22 20 69 73 20 74 72 75 65 3c 2f 74 64  se)" is true</td
1600: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1610: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1620: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1630: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1640: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1650: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1660: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1670: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1680: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1690: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
16a0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
16b0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
16c0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
16d0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
16e0: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
16f0: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1700: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1710: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1720: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1730: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1740: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1750: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1760: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1770: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1780: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1790: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
17a0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
17b0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c  td>.</tr>.</tabl
17c0: 65 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65  e>..<table borde
17d0: 72 3d 31 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  r=1 cellpadding=
17e0: 33 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 0a  3 width="100%">.
17f0: 3c 74 72 3e 3c 74 68 3e 26 6e 62 73 70 26 6e 62  <tr><th>&nbsp&nb
1800: 73 70 3b 3c 2f 74 68 3e 0a 3c 74 68 3e 4d 79 53  sp;</th>.<th>MyS
1810: 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 46 69 72 65  QL</th>.<th>Fire
1820: 62 69 72 64 3c 2f 74 68 3e 0a 3c 74 68 3e 53 51  bird</th>.<th>SQ
1830: 4c 20 41 6e 79 77 68 65 72 65 3c 2f 74 68 3e 0a  L Anywhere</th>.
1840: 3c 74 68 3e 42 6f 72 6c 61 6e 64 20 49 6e 74 65  <th>Borland Inte
1850: 72 62 61 73 65 3c 2f 74 68 3e 0a 3c 2f 74 72 3e  rbase</th>.</tr>
1860: 0a 0a 3c 74 72 3e 3c 74 64 3e 41 64 64 69 6e 67  ..<tr><td>Adding
1870: 20 61 6e 79 74 68 69 6e 67 20 74 6f 20 6e 75 6c   anything to nul
1880: 6c 20 67 69 76 65 73 20 6e 75 6c 6c 3c 2f 74 64  l gives null</td
1890: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
18a0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
18b0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
18c0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
18d0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
18e0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
18f0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1900: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1910: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1920: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1930: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1940: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1950: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1960: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1970: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1980: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  >Yes</td>.</tr>.
1990: 3c 74 72 3e 3c 74 64 3e 4d 75 6c 74 69 70 6c 79  <tr><td>Multiply
19a0: 69 6e 67 20 6e 75 6c 6c 20 62 79 20 7a 65 72 6f  ing null by zero
19b0: 20 67 69 76 65 73 20 6e 75 6c 6c 3c 2f 74 64 3e   gives null</td>
19c0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
19d0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
19e0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
19f0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1a00: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1a10: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1a20: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
1a30: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
1a40: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1a50: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1a60: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
1a70: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
1a80: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1a90: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1aa0: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
1ab0: 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  Yes</td>.</tr>.<
1ac0: 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65  tr><td>nulls are
1ad0: 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20 55   distinct in a U
1ae0: 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 3c 2f 74 64  NIQUE column</td
1af0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1b00: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1b10: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1b20: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1b30: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1b40: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1b50: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1b60: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1b70: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1b80: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1b90: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64   bgcolor="#aaaad
1ba0: 32 22 3e 28 4e 6f 74 65 20 34 29 3c 2f 74 64 3e  2">(Note 4)</td>
1bb0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1bc0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1bd0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61  er" bgcolor="#aa
1be0: 61 61 64 32 22 3e 28 4e 6f 74 65 20 34 29 3c 2f  aad2">(Note 4)</
1bf0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
1c00: 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64 69 73 74  d>nulls are dist
1c10: 69 6e 63 74 20 69 6e 20 53 45 4c 45 43 54 20 44  inct in SELECT D
1c20: 49 53 54 49 4e 43 54 3c 2f 74 64 3e 0a 3c 74 64  ISTINCT</td>.<td
1c30: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1c40: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1c50: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1c60: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
1c70: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1c80: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1c90: 6f 6c 6f 72 3d 22 23 61 61 61 61 64 32 22 3e 28  olor="#aaaad2">(
1ca0: 4e 6f 74 65 20 31 29 3c 2f 74 64 3e 0a 3c 74 64  Note 1)</td>.<td
1cb0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1cc0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1cd0: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1ce0: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
1cf0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1d00: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1d10: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
1d20: 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  o</td>.</tr>.<tr
1d30: 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64  ><td>nulls are d
1d40: 69 73 74 69 6e 63 74 20 69 6e 20 61 20 55 4e 49  istinct in a UNI
1d50: 4f 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ON</td>.<td vali
1d60: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1d70: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1d80: 6f 72 3d 22 23 61 61 61 61 64 32 22 3e 28 4e 6f  or="#aaaad2">(No
1d90: 74 65 20 33 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  te 3)</td>.<td v
1da0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1db0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1dc0: 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64 32 22 3e  color="#aaaad2">
1dd0: 28 4e 6f 74 65 20 31 29 3c 2f 74 64 3e 0a 3c 74  (Note 1)</td>.<t
1de0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1df0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1e00: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
1e10: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
1e20: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1e30: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1e40: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1e50: 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  No</td>.</tr>.<t
1e60: 72 3e 3c 74 64 3e 22 43 41 53 45 20 57 48 45 4e  r><td>"CASE WHEN
1e70: 20 6e 75 6c 6c 20 54 48 45 4e 20 31 20 45 4c 53   null THEN 1 ELS
1e80: 45 20 30 20 45 4e 44 22 20 69 73 20 30 3f 3c 2f  E 0 END" is 0?</
1e90: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1ea0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1eb0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1ec0: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1ed0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1ee0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1ef0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1f00: 61 61 61 64 32 22 3e 28 4e 6f 74 65 20 32 29 3c  aaad2">(Note 2)<
1f10: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1f20: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1f30: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1f40: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1f50: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1f60: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
1f70: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
1f80: 61 61 61 61 64 32 22 3e 28 4e 6f 74 65 20 35 29  aaaad2">(Note 5)
1f90: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
1fa0: 3c 74 64 3e 22 6e 75 6c 6c 20 4f 52 20 74 72 75  <td>"null OR tru
1fb0: 65 22 20 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a  e" is true</td>.
1fc0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1fd0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1fe0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1ff0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
2000: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2010: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2020: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
2030: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
2040: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
2050: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
2060: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
2070: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
2080: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2090: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
20a0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
20b0: 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  es</td>.</tr>.<t
20c0: 72 3e 3c 74 64 3e 22 6e 6f 74 20 28 6e 75 6c 6c  r><td>"not (null
20d0: 20 41 4e 44 20 66 61 6c 73 65 29 22 20 69 73 20   AND false)" is 
20e0: 74 72 75 65 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  true</td>.<td va
20f0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2100: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2110: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
2120: 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  o</td>.<td valig
2130: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
2140: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
2150: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
2160: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
2170: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
2180: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
2190: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
21a0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
21b0: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
21c0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
21d0: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
21e0: 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a  .</tr>.</table>.
21f0: 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 30  .<table border=0
2200: 20 61 6c 69 67 6e 3d 22 72 69 67 68 74 22 20 63   align="right" c
2210: 65 6c 6c 70 61 64 64 69 6e 67 3d 30 20 63 65 6c  ellpadding=0 cel
2220: 6c 73 70 61 63 69 6e 67 3d 30 3e 0a 3c 74 72 3e  lspacing=0>.<tr>
2230: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 74 6f 70  .<td valign="top
2240: 22 20 72 6f 77 73 70 61 6e 3d 35 3e 4e 6f 74 65  " rowspan=5>Note
2250: 73 3a 26 6e 62 73 70 3b 26 6e 62 73 70 3b 3c 2f  s:&nbsp;&nbsp;</
2260: 74 64 3e 0a 3c 74 64 3e 31 2e 26 6e 62 73 70 3b  td>.<td>1.&nbsp;
2270: 3c 2f 74 64 3e 0a 3c 74 64 3e 46 69 72 65 62 69  </td>.<td>Firebi
2280: 72 64 20 6f 6d 69 74 73 20 61 6c 6c 20 4e 55 4c  rd omits all NUL
2290: 4c 73 20 66 72 6f 6d 20 53 45 4c 45 43 54 20 44  Ls from SELECT D
22a0: 49 53 54 49 4e 43 54 20 61 6e 64 20 66 72 6f 6d  ISTINCT and from
22b0: 20 55 4e 49 4f 4e 2e 3c 2f 74 64 3e 0a 3c 2f 74   UNION.</td>.</t
22c0: 72 3e 0a 3c 74 72 3e 3c 74 64 3e 32 2e 26 6e 62  r>.<tr><td>2.&nb
22d0: 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 54 65 73  sp;</td>.<td>Tes
22e0: 74 20 64 61 74 61 20 75 6e 61 76 61 69 6c 61 62  t data unavailab
22f0: 6c 65 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  le.</td>.</tr>.<
2300: 74 72 3e 3c 74 64 3e 33 2e 26 6e 62 73 70 3b 3c  tr><td>3.&nbsp;<
2310: 2f 74 64 3e 0a 3c 74 64 3e 54 68 65 20 76 65 72  /td>.<td>The ver
2320: 73 69 6f 6e 20 6f 66 20 4d 79 53 51 4c 20 74 65  sion of MySQL te
2330: 73 74 65 64 20 28 33 2e 32 33 2e 34 31 29 20 64  sted (3.23.41) d
2340: 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20  oes not support 
2350: 55 4e 49 4f 4e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  UNION.</td>.</tr
2360: 3e 0a 3c 74 72 3e 3c 74 64 3e 34 2e 26 6e 62 73  >.<tr><td>4.&nbs
2370: 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 53 51 4c 20  p;</td>.<td>SQL 
2380: 41 6e 79 77 68 65 72 65 20 61 6e 64 20 42 6f 72  Anywhere and Bor
2390: 6c 61 6e 64 20 49 6e 74 65 72 62 61 73 65 20 0a  land Interbase .
23a0: 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 4e 55 4c  do not allow NUL
23b0: 4c 73 20 69 6e 20 61 20 55 4e 49 51 55 45 20 63  Ls in a UNIQUE c
23c0: 6f 6c 75 6d 6e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72  olumn.</td>.</tr
23d0: 3e 0a 3c 74 72 3e 3c 74 64 3e 35 2e 26 6e 62 73  >.<tr><td>5.&nbs
23e0: 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 42 6f 72 6c  p;</td>.<td>Borl
23f0: 61 6e 64 20 49 6e 74 65 72 62 61 73 65 20 64 6f  and Interbase do
2400: 65 73 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 43  es not support C
2410: 41 53 45 20 65 78 70 72 65 73 73 69 6f 6e 73 2e  ASE expressions.
2420: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
2430: 62 6c 65 3e 0a 3c 62 72 20 63 6c 65 61 72 3d 22  ble>.<br clear="
2440: 62 6f 74 68 22 3e 0a 0a 3c 70 3e 26 6e 62 73 70  both">..<p>&nbsp
2450: 3b 3c 2f 70 3e 0a 3c 70 3e 0a 54 68 65 20 66 6f  ;</p>.<p>.The fo
2460: 6c 6c 6f 77 69 6e 67 20 73 63 72 69 70 74 20 77  llowing script w
2470: 61 73 20 75 73 65 64 20 74 6f 20 67 61 74 68 65  as used to gathe
2480: 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 66 6f  r information fo
2490: 72 20 74 68 65 20 74 61 62 6c 65 0a 61 62 6f 76  r the table.abov
24a0: 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 72 65 3e 0a 2d  e..</p>..<pre>.-
24b0: 2d 20 49 20 68 61 76 65 20 61 62 6f 75 74 20 64  - I have about d
24c0: 65 63 69 64 65 64 20 74 68 61 74 20 53 51 4c 27  ecided that SQL'
24d0: 73 20 74 72 65 61 74 6d 65 6e 74 20 6f 66 20 4e  s treatment of N
24e0: 55 4c 4c 73 20 69 73 20 63 61 70 72 69 63 69 6f  ULLs is capricio
24f0: 75 73 20 61 6e 64 20 63 61 6e 6e 6f 74 20 62 65  us and cannot be
2500: 0a 2d 2d 20 64 65 64 75 63 65 64 20 62 79 20 6c  .-- deduced by l
2510: 6f 67 69 63 2e 20 20 49 74 20 6d 75 73 74 20 62  ogic.  It must b
2520: 65 20 64 69 73 63 6f 76 65 72 65 64 20 62 79 20  e discovered by 
2530: 65 78 70 65 72 69 6d 65 6e 74 2e 20 20 54 6f 20  experiment.  To 
2540: 74 68 61 74 20 65 6e 64 2c 20 49 20 68 61 76 65  that end, I have
2550: 20 0a 2d 2d 20 70 72 65 70 61 72 65 64 20 74 68   .-- prepared th
2560: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 72 69  e following scri
2570: 70 74 20 74 6f 20 74 65 73 74 20 68 6f 77 20 76  pt to test how v
2580: 61 72 69 6f 75 73 20 53 51 4c 20 64 61 74 61 62  arious SQL datab
2590: 61 73 65 73 20 64 65 61 6c 20 77 69 74 68 20 4e  ases deal with N
25a0: 55 4c 4c 2e 0a 2d 2d 20 4d 79 20 61 69 6d 20 69  ULL..-- My aim i
25b0: 73 20 74 6f 20 75 73 65 20 74 68 65 20 69 6e 66  s to use the inf
25c0: 6f 72 6d 61 74 69 6f 6e 20 67 61 74 68 65 72 20  ormation gather 
25d0: 66 72 6f 6d 20 74 68 69 73 20 73 63 72 69 70 74  from this script
25e0: 20 74 6f 20 6d 61 6b 65 20 53 51 4c 69 74 65 20   to make SQLite 
25f0: 61 73 20 6d 75 63 68 0a 2d 2d 20 6c 69 6b 65 20  as much.-- like 
2600: 6f 74 68 65 72 20 64 61 74 61 62 61 73 65 73 20  other databases 
2610: 61 73 20 70 6f 73 73 69 62 6c 65 2e 0a 2d 2d 0a  as possible..--.
2620: 2d 2d 20 49 66 20 79 6f 75 20 63 6f 75 6c 64 20  -- If you could 
2630: 70 6c 65 61 73 65 20 72 75 6e 20 74 68 69 73 20  please run this 
2640: 73 63 72 69 70 74 20 69 6e 20 79 6f 75 72 20 64  script in your d
2650: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 61  atabase engine a
2660: 6e 64 20 6d 61 69 6c 20 74 68 65 20 72 65 73 75  nd mail the resu
2670: 6c 74 73 0a 2d 2d 20 74 6f 20 6d 65 20 61 74 20  lts.-- to me at 
2680: 64 72 68 40 68 77 61 63 69 2e 63 6f 6d 2c 20 74  drh@hwaci.com, t
2690: 68 61 74 20 77 69 6c 6c 20 62 65 20 61 20 62 69  hat will be a bi
26a0: 67 20 68 65 6c 70 2e 20 20 50 6c 65 61 73 65 20  g help.  Please 
26b0: 62 65 20 73 75 72 65 20 74 6f 20 69 64 65 6e 74  be sure to ident
26c0: 69 66 79 20 74 68 65 0a 2d 2d 20 64 61 74 61 62  ify the.-- datab
26d0: 61 73 65 20 65 6e 67 69 6e 65 20 79 6f 75 20 75  ase engine you u
26e0: 73 65 20 66 6f 72 20 74 68 69 73 20 74 65 73 74  se for this test
26f0: 2e 20 20 54 68 61 6e 6b 73 2e 0a 2d 2d 0a 2d 2d  .  Thanks..--.--
2700: 20 49 66 20 79 6f 75 20 68 61 76 65 20 74 6f 20   If you have to 
2710: 63 68 61 6e 67 65 20 61 6e 79 74 68 69 6e 67 20  change anything 
2720: 74 6f 20 67 65 74 20 74 68 69 73 20 73 63 72 69  to get this scri
2730: 70 74 20 74 6f 20 72 75 6e 20 77 69 74 68 20 79  pt to run with y
2740: 6f 75 72 20 64 61 74 61 62 61 73 65 0a 2d 2d 20  our database.-- 
2750: 65 6e 67 69 6e 65 2c 20 70 6c 65 61 73 65 20 73  engine, please s
2760: 65 6e 64 20 79 6f 75 72 20 72 65 76 69 73 65 64  end your revised
2770: 20 73 63 72 69 70 74 20 74 6f 67 65 74 68 65 72   script together
2780: 20 77 69 74 68 20 79 6f 75 72 20 72 65 73 75 6c   with your resul
2790: 74 73 2e 0a 2d 2d 0a 0a 2d 2d 20 43 72 65 61 74  ts..--..-- Creat
27a0: 65 20 61 20 74 65 73 74 20 74 61 62 6c 65 20 77  e a test table w
27b0: 69 74 68 20 64 61 74 61 0a 63 72 65 61 74 65 20  ith data.create 
27c0: 74 61 62 6c 65 20 74 31 28 61 20 69 6e 74 2c 20  table t1(a int, 
27d0: 62 20 69 6e 74 2c 20 63 20 69 6e 74 29 3b 0a 69  b int, c int);.i
27e0: 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61  nsert into t1 va
27f0: 6c 75 65 73 28 31 2c 30 2c 30 29 3b 0a 69 6e 73  lues(1,0,0);.ins
2800: 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75  ert into t1 valu
2810: 65 73 28 32 2c 30 2c 31 29 3b 0a 69 6e 73 65 72  es(2,0,1);.inser
2820: 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73  t into t1 values
2830: 28 33 2c 31 2c 30 29 3b 0a 69 6e 73 65 72 74 20  (3,1,0);.insert 
2840: 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 28 34  into t1 values(4
2850: 2c 31 2c 31 29 3b 0a 69 6e 73 65 72 74 20 69 6e  ,1,1);.insert in
2860: 74 6f 20 74 31 20 76 61 6c 75 65 73 28 35 2c 6e  to t1 values(5,n
2870: 75 6c 6c 2c 30 29 3b 0a 69 6e 73 65 72 74 20 69  ull,0);.insert i
2880: 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 28 36 2c  nto t1 values(6,
2890: 6e 75 6c 6c 2c 31 29 3b 0a 69 6e 73 65 72 74 20  null,1);.insert 
28a0: 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 28 37  into t1 values(7
28b0: 2c 6e 75 6c 6c 2c 6e 75 6c 6c 29 3b 0a 0a 2d 2d  ,null,null);..--
28c0: 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20 77 68   Check to see wh
28d0: 61 74 20 43 41 53 45 20 64 6f 65 73 20 77 69 74  at CASE does wit
28e0: 68 20 4e 55 4c 4c 73 20 69 6e 20 69 74 73 20 74  h NULLs in its t
28f0: 65 73 74 20 65 78 70 72 65 73 73 69 6f 6e 73 0a  est expressions.
2900: 73 65 6c 65 63 74 20 61 2c 20 63 61 73 65 20 77  select a, case w
2910: 68 65 6e 20 62 3c 3e 30 20 74 68 65 6e 20 31 20  hen b<>0 then 1 
2920: 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20  else 0 end from 
2930: 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 31 30 2c  t1;.select a+10,
2940: 20 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 62   case when not b
2950: 3c 3e 30 20 74 68 65 6e 20 31 20 65 6c 73 65 20  <>0 then 1 else 
2960: 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73  0 end from t1;.s
2970: 65 6c 65 63 74 20 61 2b 32 30 2c 20 63 61 73 65  elect a+20, case
2980: 20 77 68 65 6e 20 62 3c 3e 30 20 61 6e 64 20 63   when b<>0 and c
2990: 3c 3e 30 20 74 68 65 6e 20 31 20 65 6c 73 65 20  <>0 then 1 else 
29a0: 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73  0 end from t1;.s
29b0: 65 6c 65 63 74 20 61 2b 33 30 2c 20 63 61 73 65  elect a+30, case
29c0: 20 77 68 65 6e 20 6e 6f 74 20 28 62 3c 3e 30 20   when not (b<>0 
29d0: 61 6e 64 20 63 3c 3e 30 29 20 74 68 65 6e 20 31  and c<>0) then 1
29e0: 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f 6d   else 0 end from
29f0: 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 34 30   t1;.select a+40
2a00: 2c 20 63 61 73 65 20 77 68 65 6e 20 62 3c 3e 30  , case when b<>0
2a10: 20 6f 72 20 63 3c 3e 30 20 74 68 65 6e 20 31 20   or c<>0 then 1 
2a20: 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20  else 0 end from 
2a30: 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 35 30 2c  t1;.select a+50,
2a40: 20 63 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 28   case when not (
2a50: 62 3c 3e 30 20 6f 72 20 63 3c 3e 30 29 20 74 68  b<>0 or c<>0) th
2a60: 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20  en 1 else 0 end 
2a70: 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20  from t1;.select 
2a80: 61 2b 36 30 2c 20 63 61 73 65 20 62 20 77 68 65  a+60, case b whe
2a90: 6e 20 63 20 74 68 65 6e 20 31 20 65 6c 73 65 20  n c then 1 else 
2aa0: 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73  0 end from t1;.s
2ab0: 65 6c 65 63 74 20 61 2b 37 30 2c 20 63 61 73 65  elect a+70, case
2ac0: 20 63 20 77 68 65 6e 20 62 20 74 68 65 6e 20 31   c when b then 1
2ad0: 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f 6d   else 0 end from
2ae0: 20 74 31 3b 0a 0a 2d 2d 20 57 68 61 74 20 68 61   t1;..-- What ha
2af0: 70 70 65 6e 73 20 77 68 65 6e 20 79 6f 75 20 6d  ppens when you m
2b00: 75 6c 74 69 70 6c 65 20 61 20 4e 55 4c 4c 20 62  ultiple a NULL b
2b10: 79 20 7a 65 72 6f 3f 0a 73 65 6c 65 63 74 20 61  y zero?.select a
2b20: 2b 38 30 2c 20 62 2a 30 20 66 72 6f 6d 20 74 31  +80, b*0 from t1
2b30: 3b 0a 73 65 6c 65 63 74 20 61 2b 39 30 2c 20 62  ;.select a+90, b
2b40: 2a 63 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20  *c from t1;..-- 
2b50: 57 68 61 74 20 68 61 70 70 65 6e 73 20 74 6f 20  What happens to 
2b60: 4e 55 4c 4c 20 66 6f 72 20 6f 74 68 65 72 20 6f  NULL for other o
2b70: 70 65 72 61 74 6f 72 73 3f 0a 73 65 6c 65 63 74  perators?.select
2b80: 20 61 2b 31 30 30 2c 20 62 2b 63 20 66 72 6f 6d   a+100, b+c from
2b90: 20 74 31 3b 0a 0a 2d 2d 20 54 65 73 74 20 74 68   t1;..-- Test th
2ba0: 65 20 74 72 65 61 74 6d 65 6e 74 20 6f 66 20 61  e treatment of a
2bb0: 67 67 72 65 67 61 74 65 20 6f 70 65 72 61 74 6f  ggregate operato
2bc0: 72 73 0a 73 65 6c 65 63 74 20 63 6f 75 6e 74 28  rs.select count(
2bd0: 2a 29 2c 20 63 6f 75 6e 74 28 62 29 2c 20 73 75  *), count(b), su
2be0: 6d 28 62 29 2c 20 61 76 67 28 62 29 2c 20 6d 69  m(b), avg(b), mi
2bf0: 6e 28 62 29 2c 20 6d 61 78 28 62 29 20 66 72 6f  n(b), max(b) fro
2c00: 6d 20 74 31 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20  m t1;..-- Check 
2c10: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
2c20: 4e 55 4c 4c 73 20 69 6e 20 57 48 45 52 45 20 63  NULLs in WHERE c
2c30: 6c 61 75 73 65 73 0a 73 65 6c 65 63 74 20 61 2b  lauses.select a+
2c40: 31 31 30 20 66 72 6f 6d 20 74 31 20 77 68 65 72  110 from t1 wher
2c50: 65 20 62 3c 31 30 3b 0a 73 65 6c 65 63 74 20 61  e b<10;.select a
2c60: 2b 31 32 30 20 66 72 6f 6d 20 74 31 20 77 68 65  +120 from t1 whe
2c70: 72 65 20 6e 6f 74 20 62 3e 31 30 3b 0a 73 65 6c  re not b>10;.sel
2c80: 65 63 74 20 61 2b 31 33 30 20 66 72 6f 6d 20 74  ect a+130 from t
2c90: 31 20 77 68 65 72 65 20 62 3c 31 30 20 4f 52 20  1 where b<10 OR 
2ca0: 63 3d 31 3b 0a 73 65 6c 65 63 74 20 61 2b 31 34  c=1;.select a+14
2cb0: 30 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  0 from t1 where 
2cc0: 62 3c 31 30 20 41 4e 44 20 63 3d 31 3b 0a 73 65  b<10 AND c=1;.se
2cd0: 6c 65 63 74 20 61 2b 31 35 30 20 66 72 6f 6d 20  lect a+150 from 
2ce0: 74 31 20 77 68 65 72 65 20 6e 6f 74 20 28 62 3c  t1 where not (b<
2cf0: 31 30 20 41 4e 44 20 63 3d 31 29 3b 0a 73 65 6c  10 AND c=1);.sel
2d00: 65 63 74 20 61 2b 31 36 30 20 66 72 6f 6d 20 74  ect a+160 from t
2d10: 31 20 77 68 65 72 65 20 6e 6f 74 20 28 63 3d 31  1 where not (c=1
2d20: 20 41 4e 44 20 62 3c 31 30 29 3b 0a 0a 2d 2d 20   AND b<10);..-- 
2d30: 43 68 65 63 6b 20 74 68 65 20 62 65 68 61 76 69  Check the behavi
2d40: 6f 72 20 6f 66 20 4e 55 4c 4c 73 20 69 6e 20 61  or of NULLs in a
2d50: 20 44 49 53 54 49 4e 43 54 20 71 75 65 72 79 0a   DISTINCT query.
2d60: 73 65 6c 65 63 74 20 64 69 73 74 69 6e 63 74 20  select distinct 
2d70: 62 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20 43  b from t1;..-- C
2d80: 68 65 63 6b 20 74 68 65 20 62 65 68 61 76 69 6f  heck the behavio
2d90: 72 20 6f 66 20 4e 55 4c 4c 73 20 69 6e 20 61 20  r of NULLs in a 
2da0: 55 4e 49 4f 4e 20 71 75 65 72 79 0a 73 65 6c 65  UNION query.sele
2db0: 63 74 20 62 20 66 72 6f 6d 20 74 31 20 75 6e 69  ct b from t1 uni
2dc0: 6f 6e 20 73 65 6c 65 63 74 20 62 20 66 72 6f 6d  on select b from
2dd0: 20 74 31 3b 0a 0a 2d 2d 20 43 72 65 61 74 65 20   t1;..-- Create 
2de0: 61 20 6e 65 77 20 74 61 62 6c 65 20 77 69 74 68  a new table with
2df0: 20 61 20 75 6e 69 71 75 65 20 63 6f 6c 75 6d 6e   a unique column
2e00: 2e 20 20 43 68 65 63 6b 20 74 6f 20 73 65 65 20  .  Check to see 
2e10: 69 66 20 4e 55 4c 4c 73 20 61 72 65 20 63 6f 6e  if NULLs are con
2e20: 73 69 64 65 72 65 64 0a 2d 2d 20 74 6f 20 62 65  sidered.-- to be
2e30: 20 64 69 73 74 69 6e 63 74 2e 0a 63 72 65 61 74   distinct..creat
2e40: 65 20 74 61 62 6c 65 20 74 32 28 61 20 69 6e 74  e table t2(a int
2e50: 2c 20 62 20 69 6e 74 20 75 6e 69 71 75 65 29 3b  , b int unique);
2e60: 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 32 20  .insert into t2 
2e70: 76 61 6c 75 65 73 28 31 2c 31 29 3b 0a 69 6e 73  values(1,1);.ins
2e80: 65 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75  ert into t2 valu
2e90: 65 73 28 32 2c 6e 75 6c 6c 29 3b 0a 69 6e 73 65  es(2,null);.inse
2ea0: 72 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75 65  rt into t2 value
2eb0: 73 28 33 2c 6e 75 6c 6c 29 3b 0a 73 65 6c 65 63  s(3,null);.selec
2ec0: 74 20 2a 20 66 72 6f 6d 20 74 32 3b 0a 0a 64 72  t * from t2;..dr
2ed0: 6f 70 20 74 61 62 6c 65 20 74 31 3b 0a 64 72 6f  op table t1;.dro
2ee0: 70 20 74 61 62 6c 65 20 74 32 3b 0a 3c 2f 70 72  p table t2;.</pr
2ef0: 65 3e 0a 0a 3c 70 3e 3c 68 72 20 2f 3e 3c 2f 70  e>..<p><hr /></p
2f00: 3e 0a 3c 70 3e 3c 61 20 68 72 65 66 3d 22 69 6e  >.<p><a href="in
2f10: 64 65 78 2e 68 74 6d 6c 22 3e 3c 69 6d 67 20 73  dex.html"><img s
2f20: 72 63 3d 22 2f 67 6f 62 61 63 6b 2e 6a 70 67 22  rc="/goback.jpg"
2f30: 20 62 6f 72 64 65 72 3d 30 20 2f 3e 0a 42 61 63   border=0 />.Bac
2f40: 6b 20 74 6f 20 74 68 65 20 53 51 4c 69 74 65 20  k to the SQLite 
2f50: 48 6f 6d 65 20 50 61 67 65 3c 2f 61 3e 0a 3c 2f  Home Page</a>.</
2f60: 70 3e 0a 3c 2f 62 6f 64 79 3e 0a 3c 2f 68 74 6d  p>.</body>.</htm
2f70: 6c 3e 0a 7d 0a                                   l>.}.