/ Hex Artifact Content
Login

Artifact ec35193f92485b87b90a994a01d0171b58823fcf:


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 38 20 32 30 30 34  s.tcl,v 1.8 2004
0060: 2f 31 30 2f 31 30 20 31 37 3a 32 34 3a 35 35 20  /10/10 17:24:55 
0070: 64 72 68 20 45 78 70 20 24 7d 0a 73 6f 75 72 63  drh Exp $}.sourc
0080: 65 20 63 6f 6d 6d 6f 6e 2e 74 63 6c 0a 68 65 61  e common.tcl.hea
0090: 64 65 72 20 7b 4e 55 4c 4c 20 48 61 6e 64 6c 69  der {NULL Handli
00a0: 6e 67 20 69 6e 20 53 51 4c 69 74 65 7d 0a 70 75  ng in SQLite}.pu
00b0: 74 73 20 7b 0a 3c 68 32 3e 4e 55 4c 4c 20 48 61  ts {.<h2>NULL Ha
00c0: 6e 64 6c 69 6e 67 20 69 6e 20 53 51 4c 69 74 65  ndling in SQLite
00d0: 20 56 65 72 73 75 73 20 4f 74 68 65 72 20 44 61   Versus Other Da
00e0: 74 61 62 61 73 65 20 45 6e 67 69 6e 65 73 3c 2f  tabase Engines</
00f0: 68 32 3e 0a 0a 3c 70 3e 0a 54 68 65 20 67 6f 61  h2>..<p>.The goa
0100: 6c 20 69 73 0a 74 6f 20 6d 61 6b 65 20 53 51 4c  l is.to make SQL
0110: 69 74 65 20 68 61 6e 64 6c 65 20 4e 55 4c 4c 73  ite handle NULLs
0120: 20 69 6e 20 61 20 73 74 61 6e 64 61 72 64 73 2d   in a standards-
0130: 63 6f 6d 70 6c 69 61 6e 74 20 77 61 79 2e 0a 42  compliant way..B
0140: 75 74 20 74 68 65 20 64 65 73 63 72 69 70 74 69  ut the descripti
0150: 6f 6e 73 20 69 6e 20 74 68 65 20 53 51 4c 20 73  ons in the SQL s
0160: 74 61 6e 64 61 72 64 73 20 6f 6e 20 68 6f 77 20  tandards on how 
0170: 74 6f 20 68 61 6e 64 6c 65 0a 4e 55 4c 4c 73 20  to handle.NULLs 
0180: 73 65 65 6d 20 61 6d 62 69 67 75 6f 75 73 2e 20  seem ambiguous. 
0190: 0a 49 74 20 69 73 20 6e 6f 74 20 63 6c 65 61 72  .It is not clear
01a0: 20 66 72 6f 6d 20 74 68 65 20 73 74 61 6e 64 61   from the standa
01b0: 72 64 73 20 64 6f 63 75 6d 65 6e 74 73 20 65 78  rds documents ex
01c0: 61 63 74 6c 79 20 68 6f 77 20 4e 55 4c 4c 73 20  actly how NULLs 
01d0: 73 68 6f 75 6c 64 0a 62 65 20 68 61 6e 64 6c 65  should.be handle
01e0: 64 20 69 6e 20 61 6c 6c 20 63 69 72 63 75 6d 73  d in all circums
01f0: 74 61 6e 63 65 73 2e 0a 3c 2f 70 3e 0a 0a 3c 70  tances..</p>..<p
0200: 3e 0a 53 6f 20 69 6e 73 74 65 61 64 20 6f 66 20  >.So instead of 
0210: 67 6f 69 6e 67 20 62 79 20 74 68 65 20 73 74 61  going by the sta
0220: 6e 64 61 72 64 73 20 64 6f 63 75 6d 65 6e 74 73  ndards documents
0230: 2c 20 76 61 72 69 6f 75 73 20 70 6f 70 75 6c 61  , various popula
0240: 72 0a 53 51 4c 20 65 6e 67 69 6e 65 73 20 77 65  r.SQL engines we
0250: 72 65 20 74 65 73 74 65 64 20 74 6f 20 73 65 65  re tested to see
0260: 20 68 6f 77 20 74 68 65 79 20 68 61 6e 64 6c 65   how they handle
0270: 20 4e 55 4c 4c 73 2e 20 20 54 68 65 20 69 64 65   NULLs.  The ide
0280: 61 0a 77 61 73 20 74 6f 20 6d 61 6b 65 20 53 51  a.was to make SQ
0290: 4c 69 74 65 20 77 6f 72 6b 20 6c 69 6b 65 20 61  Lite work like a
02a0: 6c 6c 20 74 68 65 20 6f 74 68 65 72 20 65 6e 67  ll the other eng
02b0: 69 6e 65 73 2e 0a 41 20 53 51 4c 20 74 65 73 74  ines..A SQL test
02c0: 20 73 63 72 69 70 74 20 77 61 73 20 64 65 76 65   script was deve
02d0: 6c 6f 70 65 64 20 61 6e 64 20 72 75 6e 20 62 79  loped and run by
02e0: 20 76 6f 6c 75 6e 74 65 65 72 73 20 6f 6e 20 76   volunteers on v
02f0: 61 72 69 6f 75 73 0a 53 51 4c 20 52 44 42 4d 53  arious.SQL RDBMS
0300: 65 73 20 61 6e 64 20 74 68 65 20 72 65 73 75 6c  es and the resul
0310: 74 73 20 6f 66 20 74 68 6f 73 65 20 74 65 73 74  ts of those test
0320: 73 20 77 65 72 65 20 75 73 65 64 20 74 6f 20 64  s were used to d
0330: 65 64 75 63 65 0a 68 6f 77 20 65 61 63 68 20 65  educe.how each e
0340: 6e 67 69 6e 65 20 70 72 6f 63 65 73 73 65 64 20  ngine processed 
0350: 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a 54 68 65  NULL values..The
0360: 20 6f 72 69 67 69 6e 61 6c 20 74 65 73 74 73 20   original tests 
0370: 77 65 72 65 20 72 75 6e 20 69 6e 20 4d 61 79 20  were run in May 
0380: 6f 66 20 32 30 30 32 2e 0a 41 20 63 6f 70 79 20  of 2002..A copy 
0390: 6f 66 20 74 68 65 20 74 65 73 74 20 73 63 72 69  of the test scri
03a0: 70 74 20 69 73 20 66 6f 75 6e 64 20 61 74 20 74  pt is found at t
03b0: 68 65 20 65 6e 64 20 6f 66 20 74 68 69 73 20 64  he end of this d
03c0: 6f 63 75 6d 65 6e 74 2e 0a 3c 2f 70 3e 0a 0a 3c  ocument..</p>..<
03d0: 70 3e 0a 53 51 4c 69 74 65 20 77 61 73 20 6f 72  p>.SQLite was or
03e0: 69 67 69 6e 61 6c 6c 79 20 63 6f 64 65 64 20 69  iginally coded i
03f0: 6e 20 73 75 63 68 20 61 20 77 61 79 20 74 68 61  n such a way tha
0400: 74 20 74 68 65 20 61 6e 73 77 65 72 20 74 6f 0a  t the answer to.
0410: 61 6c 6c 20 71 75 65 73 74 69 6f 6e 73 20 69 6e  all questions in
0420: 20 74 68 65 20 63 68 61 72 74 20 62 65 6c 6f 77   the chart below
0430: 20 77 6f 75 6c 64 20 62 65 20 22 59 65 73 22 2e   would be "Yes".
0440: 20 20 42 75 74 20 74 68 65 0a 65 78 70 65 72 69    But the.experi
0450: 6d 65 6e 74 73 20 72 75 6e 20 6f 6e 20 6f 74 68  ments run on oth
0460: 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 73 20 73  er SQL engines s
0470: 68 6f 77 65 64 20 74 68 61 74 20 6e 6f 6e 65 20  howed that none 
0480: 6f 66 20 74 68 65 6d 0a 77 6f 72 6b 65 64 20 74  of them.worked t
0490: 68 69 73 20 77 61 79 2e 20 20 53 6f 20 53 51 4c  his way.  So SQL
04a0: 69 74 65 20 77 61 73 20 6d 6f 64 69 66 69 65 64  ite was modified
04b0: 20 74 6f 20 77 6f 72 6b 20 74 68 65 20 73 61 6d   to work the sam
04c0: 65 20 61 73 0a 4f 72 61 63 6c 65 2c 20 50 6f 73  e as.Oracle, Pos
04d0: 74 67 72 65 53 51 4c 2c 20 61 6e 64 20 44 42 32  tgreSQL, and DB2
04e0: 2e 20 20 54 68 69 73 20 69 6e 76 6f 6c 76 65 64  .  This involved
04f0: 20 6d 61 6b 69 6e 67 20 4e 55 4c 4c 73 0a 69 6e   making NULLs.in
0500: 64 69 73 74 69 6e 63 74 20 66 6f 72 20 74 68 65  distinct for the
0510: 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65   purposes of the
0520: 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54   SELECT DISTINCT
0530: 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 66   statement and.f
0540: 6f 72 20 74 68 65 20 55 4e 49 4f 4e 20 6f 70 65  or the UNION ope
0550: 72 61 74 6f 72 20 69 6e 20 61 20 53 45 4c 45 43  rator in a SELEC
0560: 54 2e 20 20 4e 55 4c 4c 73 20 61 72 65 20 73 74  T.  NULLs are st
0570: 69 6c 6c 20 64 69 73 74 69 6e 63 74 0a 69 6e 20  ill distinct.in 
0580: 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 2e  a UNIQUE column.
0590: 20 20 54 68 69 73 20 73 65 65 6d 73 20 73 6f 6d    This seems som
05a0: 65 77 68 61 74 20 61 72 62 69 74 72 61 72 79 2c  ewhat arbitrary,
05b0: 20 62 75 74 20 74 68 65 20 64 65 73 69 72 65 0a   but the desire.
05c0: 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65  to be compatible
05d0: 20 77 69 74 68 20 6f 74 68 65 72 20 65 6e 67 69   with other engi
05e0: 6e 65 73 20 6f 75 74 77 65 69 67 68 74 65 64 20  nes outweighted 
05f0: 74 68 61 74 20 6f 62 6a 65 63 74 69 6f 6e 2e 0a  that objection..
0600: 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 74 20 69 73 20  </p>..<p>.It is 
0610: 70 6f 73 73 69 62 6c 65 20 74 6f 20 6d 61 6b 65  possible to make
0620: 20 53 51 4c 69 74 65 20 74 72 65 61 74 20 4e 55   SQLite treat NU
0630: 4c 4c 73 20 61 73 20 64 69 73 74 69 6e 63 74 20  LLs as distinct 
0640: 66 6f 72 20 74 68 65 0a 70 75 72 70 6f 73 65 73  for the.purposes
0650: 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 44   of the SELECT D
0660: 49 53 54 49 4e 43 54 20 61 6e 64 20 55 4e 49 4f  ISTINCT and UNIO
0670: 4e 2e 20 20 54 6f 20 64 6f 20 73 6f 2c 20 6f 6e  N.  To do so, on
0680: 65 20 73 68 6f 75 6c 64 0a 63 68 61 6e 67 65 20  e should.change 
0690: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
06a0: 20 4e 55 4c 4c 5f 41 4c 57 41 59 53 5f 44 49 53   NULL_ALWAYS_DIS
06b0: 54 49 4e 43 54 20 23 64 65 66 69 6e 65 20 69 6e  TINCT #define in
06c0: 20 74 68 65 0a 3c 74 74 3e 73 71 6c 69 74 65 49   the.<tt>sqliteI
06d0: 6e 74 2e 68 3c 2f 74 74 3e 20 73 6f 75 72 63 65  nt.h</tt> source
06e0: 20 66 69 6c 65 20 61 6e 64 20 72 65 63 6f 6d 70   file and recomp
06f0: 69 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63  ile..</p>..<bloc
0700: 6b 71 75 6f 74 65 3e 0a 3c 70 3e 0a 3c 69 3e 55  kquote>.<p>.<i>U
0710: 70 64 61 74 65 20 32 30 30 33 2d 30 37 2d 31 33  pdate 2003-07-13
0720: 3a 3c 2f 69 3e 0a 53 69 6e 63 65 20 74 68 69 73  :</i>.Since this
0730: 20 64 6f 63 75 6d 65 6e 74 20 77 61 73 20 6f 72   document was or
0740: 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74 65 6e  iginally written
0750: 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 64 61 74   some of the dat
0760: 61 62 61 73 65 20 65 6e 67 69 6e 65 73 0a 74 65  abase engines.te
0770: 73 74 65 64 20 68 61 76 65 20 62 65 65 6e 20 75  sted have been u
0780: 70 64 61 74 65 64 20 61 6e 64 20 75 73 65 72 73  pdated and users
0790: 20 68 61 76 65 20 62 65 65 6e 20 6b 69 6e 64 20   have been kind 
07a0: 65 6e 6f 75 67 68 20 74 6f 20 73 65 6e 64 20 69  enough to send i
07b0: 6e 0a 63 6f 72 72 65 63 74 69 6f 6e 73 20 74 6f  n.corrections to
07c0: 20 74 68 65 20 63 68 61 72 74 20 62 65 6c 6f 77   the chart below
07d0: 2e 20 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20  .  The original 
07e0: 64 61 74 61 20 73 68 6f 77 65 64 20 61 20 77 69  data showed a wi
07f0: 64 65 20 76 61 72 69 65 74 79 0a 6f 66 20 62 65  de variety.of be
0800: 68 61 76 69 6f 72 73 2c 20 62 75 74 20 6f 76 65  haviors, but ove
0810: 72 20 74 69 6d 65 20 74 68 65 20 72 61 6e 67 65  r time the range
0820: 20 6f 66 20 62 65 68 61 76 69 6f 72 73 20 68 61   of behaviors ha
0830: 73 20 63 6f 6e 76 65 72 67 65 64 20 74 6f 77 61  s converged towa
0840: 72 64 0a 74 68 65 20 50 6f 73 74 67 72 65 53 51  rd.the PostgreSQ
0850: 4c 2f 4f 72 61 63 6c 65 20 6d 6f 64 65 6c 2e 20  L/Oracle model. 
0860: 20 54 68 65 20 6f 6e 6c 79 20 73 69 67 6e 69 66   The only signif
0870: 69 63 61 6e 74 20 64 69 66 66 65 72 65 6e 63 65  icant difference
0880: 20 0a 69 73 20 74 68 61 74 20 49 6e 66 6f 72 6d   .is that Inform
0890: 69 78 20 61 6e 64 20 4d 53 2d 53 51 4c 20 62 6f  ix and MS-SQL bo
08a0: 74 68 20 74 68 72 65 61 74 20 4e 55 4c 4c 73 20  th threat NULLs 
08b0: 61 73 0a 69 6e 64 69 73 74 69 6e 63 74 20 69 6e  as.indistinct in
08c0: 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e   a UNIQUE column
08d0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20  ..</p>..<p>.The 
08e0: 66 61 63 74 20 74 68 61 74 20 4e 55 4c 4c 73 20  fact that NULLs 
08f0: 61 72 65 20 64 69 73 74 69 6e 63 74 20 66 6f 72  are distinct for
0900: 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 73 20   UNIQUE columns 
0910: 62 75 74 20 61 72 65 20 69 6e 64 69 73 74 69 6e  but are indistin
0920: 63 74 20 66 6f 72 0a 53 45 4c 45 43 54 20 44 49  ct for.SELECT DI
0930: 53 54 49 4e 43 54 20 61 6e 64 20 55 4e 49 4f 4e  STINCT and UNION
0940: 20 63 6f 6e 74 69 6e 75 65 73 20 74 6f 20 62 65   continues to be
0950: 20 70 75 7a 7a 6c 69 6e 67 2e 20 20 49 74 20 73   puzzling.  It s
0960: 65 65 6d 73 20 74 68 61 74 20 4e 55 4c 4c 73 0a  eems that NULLs.
0970: 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65 72  should be either
0980: 20 64 69 73 74 69 6e 63 74 20 65 76 65 72 79 77   distinct everyw
0990: 68 65 72 65 20 6f 72 20 6e 6f 77 68 65 72 65 2e  here or nowhere.
09a0: 20 20 41 6e 64 20 74 68 65 20 53 51 4c 20 73 74    And the SQL st
09b0: 61 6e 64 61 72 64 73 0a 64 6f 63 75 6d 65 6e 74  andards.document
09c0: 73 20 73 75 67 67 65 73 74 20 74 68 61 74 20 4e  s suggest that N
09d0: 55 4c 4c 73 20 73 68 6f 75 6c 64 20 62 65 20 64  ULLs should be d
09e0: 69 73 74 69 6e 63 74 20 65 76 65 72 79 77 68 65  istinct everywhe
09f0: 72 65 2e 20 20 59 65 74 20 61 73 20 6f 66 0a 74  re.  Yet as of.t
0a00: 68 69 73 20 77 72 69 74 69 6e 67 2c 20 6e 6f 20  his writing, no 
0a10: 53 51 4c 20 65 6e 67 69 6e 65 20 74 65 73 74 65  SQL engine teste
0a20: 64 20 74 72 65 61 74 73 20 4e 55 4c 4c 73 20 61  d treats NULLs a
0a30: 73 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20  s distinct in a 
0a40: 53 45 4c 45 43 54 0a 44 49 53 54 49 4e 43 54 20  SELECT.DISTINCT 
0a50: 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 69 6e 20  statement or in 
0a60: 61 20 55 4e 49 4f 4e 2e 0a 3c 2f 70 3e 0a 3c 2f  a UNION..</p>.</
0a70: 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 0a 3c 70  blockquote>...<p
0a80: 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  >.The following 
0a90: 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20  table shows the 
0aa0: 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 4e  results of the N
0ab0: 55 4c 4c 20 68 61 6e 64 6c 69 6e 67 20 65 78 70  ULL handling exp
0ac0: 65 72 69 6d 65 6e 74 73 2e 0a 3c 2f 70 3e 0a 0a  eriments..</p>..
0ad0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20  <table border=1 
0ae0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 33 20 77 69  cellpadding=3 wi
0af0: 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c 74 72 3e  dth="100%">.<tr>
0b00: 3c 74 68 3e 26 6e 62 73 70 26 6e 62 73 70 3b 3c  <th>&nbsp&nbsp;<
0b10: 2f 74 68 3e 0a 3c 74 68 3e 53 51 4c 69 74 65 3c  /th>.<th>SQLite<
0b20: 2f 74 68 3e 0a 3c 74 68 3e 50 6f 73 74 67 72 65  /th>.<th>Postgre
0b30: 53 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f 72 61  SQL</th>.<th>Ora
0b40: 63 6c 65 3c 2f 74 68 3e 0a 3c 74 68 3e 49 6e 66  cle</th>.<th>Inf
0b50: 6f 72 6d 69 78 3c 2f 74 68 3e 0a 3c 74 68 3e 44  ormix</th>.<th>D
0b60: 42 32 3c 2f 74 68 3e 0a 3c 74 68 3e 4d 53 2d 53  B2</th>.<th>MS-S
0b70: 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f 43 45 4c  QL</th>.<th>OCEL
0b80: 4f 54 3c 2f 74 68 3e 0a 3c 2f 74 72 3e 0a 0a 3c  OT</th>.</tr>..<
0b90: 74 72 3e 3c 74 64 3e 41 64 64 69 6e 67 20 61 6e  tr><td>Adding an
0ba0: 79 74 68 69 6e 67 20 74 6f 20 6e 75 6c 6c 20 67  ything to null g
0bb0: 69 76 65 73 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c  ives null</td>.<
0bc0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
0bd0: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
0be0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
0bf0: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
0c00: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
0c10: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
0c20: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
0c30: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
0c40: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
0c50: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
0c60: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
0c70: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
0c80: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
0c90: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
0ca0: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
0cb0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
0cc0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
0cd0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
0ce0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
0cf0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
0d00: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
0d10: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
0d20: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
0d30: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
0d40: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
0d50: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
0d60: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
0d70: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d  .</tr>.<tr><td>M
0d80: 75 6c 74 69 70 6c 79 69 6e 67 20 6e 75 6c 6c 20  ultiplying null 
0d90: 62 79 20 7a 65 72 6f 20 67 69 76 65 73 20 6e 75  by zero gives nu
0da0: 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ll</td>.<td vali
0db0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
0dc0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
0dd0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
0de0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0df0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0e00: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0e10: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
0e20: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
0e30: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
0e40: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
0e50: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
0e60: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
0e70: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
0e80: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
0e90: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0ea0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0eb0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0ec0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
0ed0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
0ee0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
0ef0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
0f00: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
0f10: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
0f20: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
0f30: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
0f40: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
0f50: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  >Yes</td>.</tr>.
0f60: 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72  <tr><td>nulls ar
0f70: 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20  e distinct in a 
0f80: 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 3c 2f 74  UNIQUE column</t
0f90: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
0fa0: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
0fb0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
0fc0: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
0fd0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
0fe0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
0ff0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
1000: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1010: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1020: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1030: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
1040: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
1050: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1060: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1070: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1080: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
1090: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
10a0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
10b0: 6f 6c 6f 72 3d 22 23 61 61 61 61 64 32 22 3e 28  olor="#aaaad2">(
10c0: 4e 6f 74 65 20 34 29 3c 2f 74 64 3e 0a 3c 74 64  Note 4)</td>.<td
10d0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
10e0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
10f0: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1100: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
1110: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1120: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1130: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1140: 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  es</td>.</tr>.<t
1150: 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20  r><td>nulls are 
1160: 64 69 73 74 69 6e 63 74 20 69 6e 20 53 45 4c 45  distinct in SELE
1170: 43 54 20 44 49 53 54 49 4e 43 54 3c 2f 74 64 3e  CT DISTINCT</td>
1180: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1190: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
11a0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
11b0: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
11c0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
11d0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
11e0: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
11f0: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
1200: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1210: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1220: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1230: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
1240: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1250: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1260: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
1270: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1280: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1290: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
12a0: 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64  "#c7a9a9">No</td
12b0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
12c0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
12d0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63  ter" bgcolor="#c
12e0: 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c  7a9a9">No</td>.<
12f0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1300: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1310: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
1320: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72  a9">No</td>.</tr
1330: 3e 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20  >.<tr><td>nulls 
1340: 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20  are distinct in 
1350: 61 20 55 4e 49 4f 4e 3c 2f 74 64 3e 0a 3c 74 64  a UNION</td>.<td
1360: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1370: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1380: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
1390: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
13a0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
13b0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
13c0: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
13d0: 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  o</td>.<td valig
13e0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
13f0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1400: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f  r="#c7a9a9">No</
1410: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1420: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1430: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1440: 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e  #c7a9a9">No</td>
1450: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1460: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1470: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
1480: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
1490: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
14a0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
14b0: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
14c0: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
14d0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
14e0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
14f0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1500: 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  No</td>.</tr>.<t
1510: 72 3e 3c 74 64 3e 22 43 41 53 45 20 57 48 45 4e  r><td>"CASE WHEN
1520: 20 6e 75 6c 6c 20 54 48 45 4e 20 31 20 45 4c 53   null THEN 1 ELS
1530: 45 20 30 20 45 4e 44 22 20 69 73 20 30 3f 3c 2f  E 0 END" is 0?</
1540: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1550: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1560: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1570: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1580: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1590: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
15a0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
15b0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
15c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
15d0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
15e0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
15f0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1600: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1610: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1620: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1630: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1640: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1650: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1660: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1670: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1680: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1690: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
16a0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
16b0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
16c0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
16d0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
16e0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
16f0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
1700: 3c 74 64 3e 22 6e 75 6c 6c 20 4f 52 20 74 72 75  <td>"null OR tru
1710: 65 22 20 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a  e" is true</td>.
1720: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1730: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1740: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1750: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1760: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1770: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1780: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1790: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
17a0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
17b0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
17c0: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
17d0: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
17e0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
17f0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1800: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1810: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1820: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1830: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1840: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1850: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1860: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1870: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1880: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1890: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
18a0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
18b0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
18c0: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
18d0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  >.</tr>.<tr><td>
18e0: 22 6e 6f 74 20 28 6e 75 6c 6c 20 41 4e 44 20 66  "not (null AND f
18f0: 61 6c 73 65 29 22 20 69 73 20 74 72 75 65 3c 2f  alse)" is true</
1900: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1910: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1920: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1930: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1940: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1950: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1960: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1970: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1980: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1990: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
19a0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
19b0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
19c0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
19d0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
19e0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
19f0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1a00: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1a10: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1a20: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1a30: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1a40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1a50: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1a60: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1a70: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1a80: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1a90: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1aa0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1ab0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
1ac0: 62 6c 65 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  ble>..<table bor
1ad0: 64 65 72 3d 31 20 63 65 6c 6c 70 61 64 64 69 6e  der=1 cellpaddin
1ae0: 67 3d 33 20 77 69 64 74 68 3d 22 31 30 30 25 22  g=3 width="100%"
1af0: 3e 0a 3c 74 72 3e 3c 74 68 3e 26 6e 62 73 70 26  >.<tr><th>&nbsp&
1b00: 6e 62 73 70 3b 3c 2f 74 68 3e 0a 3c 74 68 3e 4d  nbsp;</th>.<th>M
1b10: 79 53 51 4c 3c 62 72 3e 33 2e 32 33 2e 34 31 3c  ySQL<br>3.23.41<
1b20: 2f 74 68 3e 0a 3c 74 68 3e 4d 79 53 51 4c 3c 62  /th>.<th>MySQL<b
1b30: 72 3e 34 2e 30 2e 31 36 3c 2f 74 68 3e 0a 3c 74  r>4.0.16</th>.<t
1b40: 68 3e 46 69 72 65 62 69 72 64 3c 2f 74 68 3e 0a  h>Firebird</th>.
1b50: 3c 74 68 3e 53 51 4c 3c 62 72 3e 41 6e 79 77 68  <th>SQL<br>Anywh
1b60: 65 72 65 3c 2f 74 68 3e 0a 3c 74 68 3e 42 6f 72  ere</th>.<th>Bor
1b70: 6c 61 6e 64 3c 62 72 3e 49 6e 74 65 72 62 61 73  land<br>Interbas
1b80: 65 3c 2f 74 68 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  e</th>.</tr>..<t
1b90: 72 3e 3c 74 64 3e 41 64 64 69 6e 67 20 61 6e 79  r><td>Adding any
1ba0: 74 68 69 6e 67 20 74 6f 20 6e 75 6c 6c 20 67 69  thing to null gi
1bb0: 76 65 73 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74  ves null</td>.<t
1bc0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1bd0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1be0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1bf0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1c00: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1c10: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1c20: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1c30: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1c40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1c50: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1c60: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1c70: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1c80: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1c90: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1ca0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1cb0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1cc0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1cd0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1ce0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1cf0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
1d00: 64 3e 4d 75 6c 74 69 70 6c 79 69 6e 67 20 6e 75  d>Multiplying nu
1d10: 6c 6c 20 62 79 20 7a 65 72 6f 20 67 69 76 65 73  ll by zero gives
1d20: 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76   null</td>.<td v
1d30: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1d40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1d50: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
1d60: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
1d70: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1d80: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1d90: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
1da0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
1db0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1dc0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1dd0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
1de0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1df0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1e00: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1e10: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1e20: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1e30: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
1e40: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
1e50: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
1e60: 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 6e  .</tr>.<tr><td>n
1e70: 75 6c 6c 73 20 61 72 65 20 64 69 73 74 69 6e 63  ulls are distinc
1e80: 74 20 69 6e 20 61 20 55 4e 49 51 55 45 20 63 6f  t in a UNIQUE co
1e90: 6c 75 6d 6e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  lumn</td>.<td va
1ea0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1eb0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1ec0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1ed0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1ee0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1ef0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1f00: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1f10: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1f20: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1f30: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1f40: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1f50: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1f60: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1f70: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1f80: 23 61 61 61 61 64 32 22 3e 28 4e 6f 74 65 20 34  #aaaad2">(Note 4
1f90: 29 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  )</td>.<td valig
1fa0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1fb0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1fc0: 72 3d 22 23 61 61 61 61 64 32 22 3e 28 4e 6f 74  r="#aaaad2">(Not
1fd0: 65 20 34 29 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  e 4)</td>.</tr>.
1fe0: 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72  <tr><td>nulls ar
1ff0: 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 53 45  e distinct in SE
2000: 4c 45 43 54 20 44 49 53 54 49 4e 43 54 3c 2f 74  LECT DISTINCT</t
2010: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
2020: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
2030: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
2040: 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a  c7a9a9">No</td>.
2050: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
2060: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
2070: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
2080: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64  9a9">No</td>.<td
2090: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
20a0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
20b0: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
20c0: 22 3e 4e 6f 20 28 4e 6f 74 65 20 31 29 3c 2f 74  ">No (Note 1)</t
20d0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
20e0: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
20f0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
2100: 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a  c7a9a9">No</td>.
2110: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
2120: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
2130: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
2140: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74  9a9">No</td>.</t
2150: 72 3e 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73  r>.<tr><td>nulls
2160: 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e   are distinct in
2170: 20 61 20 55 4e 49 4f 4e 3c 2f 74 64 3e 0a 3c 74   a UNION</td>.<t
2180: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2190: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
21a0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64   bgcolor="#aaaad
21b0: 32 22 3e 28 4e 6f 74 65 20 33 29 3c 2f 74 64 3e  2">(Note 3)</td>
21c0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
21d0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
21e0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
21f0: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
2200: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2210: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2220: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
2230: 39 22 3e 4e 6f 20 28 4e 6f 74 65 20 31 29 3c 2f  9">No (Note 1)</
2240: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
2250: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
2260: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
2270: 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e  #c7a9a9">No</td>
2280: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
2290: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
22a0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
22b0: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f  a9a9">No</td>.</
22c0: 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 43 41 53  tr>.<tr><td>"CAS
22d0: 45 20 57 48 45 4e 20 6e 75 6c 6c 20 54 48 45 4e  E WHEN null THEN
22e0: 20 31 20 45 4c 53 45 20 30 20 45 4e 44 22 20 69   1 ELSE 0 END" i
22f0: 73 20 30 3f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  s 0?</td>.<td va
2300: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2310: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2320: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
2330: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
2340: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
2350: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
2360: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
2370: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
2380: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
2390: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
23a0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
23b0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
23c0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
23d0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
23e0: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
23f0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
2400: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
2410: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
2420: 61 61 61 64 32 22 3e 28 4e 6f 74 65 20 35 29 3c  aaad2">(Note 5)<
2430: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  /td>.</tr>.<tr><
2440: 74 64 3e 22 6e 75 6c 6c 20 4f 52 20 74 72 75 65  td>"null OR true
2450: 22 20 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a 3c  " is true</td>.<
2460: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
2470: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
2480: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
2490: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
24a0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
24b0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
24c0: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
24d0: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
24e0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
24f0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
2500: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
2510: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
2520: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
2530: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
2540: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
2550: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
2560: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
2570: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
2580: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
2590: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  /td>.</tr>.<tr><
25a0: 74 64 3e 22 6e 6f 74 20 28 6e 75 6c 6c 20 41 4e  td>"not (null AN
25b0: 44 20 66 61 6c 73 65 29 22 20 69 73 20 74 72 75  D false)" is tru
25c0: 65 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  e</td>.<td valig
25d0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
25e0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
25f0: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f  r="#c7a9a9">No</
2600: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
2610: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
2620: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
2630: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
2640: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
2650: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
2660: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
2670: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
2680: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
2690: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
26a0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
26b0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
26c0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
26d0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
26e0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
26f0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72  9">Yes</td>.</tr
2700: 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a 3c 74 61 62  >.</table>..<tab
2710: 6c 65 20 62 6f 72 64 65 72 3d 30 20 61 6c 69 67  le border=0 alig
2720: 6e 3d 22 72 69 67 68 74 22 20 63 65 6c 6c 70 61  n="right" cellpa
2730: 64 64 69 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63  dding=0 cellspac
2740: 69 6e 67 3d 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20  ing=0>.<tr>.<td 
2750: 76 61 6c 69 67 6e 3d 22 74 6f 70 22 20 72 6f 77  valign="top" row
2760: 73 70 61 6e 3d 35 3e 4e 6f 74 65 73 3a 26 6e 62  span=5>Notes:&nb
2770: 73 70 3b 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c  sp;&nbsp;</td>.<
2780: 74 64 3e 31 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e  td>1.&nbsp;</td>
2790: 0a 3c 74 64 3e 4f 6c 64 65 72 20 76 65 72 73 69  .<td>Older versi
27a0: 6f 6e 73 20 6f 66 20 66 69 72 65 62 69 72 64 20  ons of firebird 
27b0: 6f 6d 69 74 73 20 61 6c 6c 20 4e 55 4c 4c 73 20  omits all NULLs 
27c0: 66 72 6f 6d 20 53 45 4c 45 43 54 20 44 49 53 54  from SELECT DIST
27d0: 49 4e 43 54 0a 61 6e 64 20 66 72 6f 6d 20 55 4e  INCT.and from UN
27e0: 49 4f 4e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ION.</td>.</tr>.
27f0: 3c 74 72 3e 3c 74 64 3e 32 2e 26 6e 62 73 70 3b  <tr><td>2.&nbsp;
2800: 3c 2f 74 64 3e 0a 3c 74 64 3e 54 65 73 74 20 64  </td>.<td>Test d
2810: 61 74 61 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e  ata unavailable.
2820: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
2830: 3c 74 64 3e 33 2e 26 6e 62 73 70 3b 3c 2f 74 64  <td>3.&nbsp;</td
2840: 3e 0a 3c 74 64 3e 4d 79 53 51 4c 20 76 65 72 73  >.<td>MySQL vers
2850: 69 6f 6e 20 33 2e 32 33 2e 34 31 20 64 6f 65 73  ion 3.23.41 does
2860: 20 6e 6f 74 20 73 75 70 70 6f 72 74 20 55 4e 49   not support UNI
2870: 4f 4e 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ON.</td>.</tr>.<
2880: 74 72 3e 3c 74 64 3e 34 2e 26 6e 62 73 70 3b 3c  tr><td>4.&nbsp;<
2890: 2f 74 64 3e 0a 3c 74 64 3e 44 42 32 2c 20 53 51  /td>.<td>DB2, SQ
28a0: 4c 20 41 6e 79 77 68 65 72 65 2c 20 61 6e 64 20  L Anywhere, and 
28b0: 42 6f 72 6c 61 6e 64 20 49 6e 74 65 72 62 61 73  Borland Interbas
28c0: 65 20 0a 64 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20  e .do not allow 
28d0: 4e 55 4c 4c 73 20 69 6e 20 61 20 55 4e 49 51 55  NULLs in a UNIQU
28e0: 45 20 63 6f 6c 75 6d 6e 2e 3c 2f 74 64 3e 0a 3c  E column.</td>.<
28f0: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 35 2e 26  /tr>.<tr><td>5.&
2900: 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 42  nbsp;</td>.<td>B
2910: 6f 72 6c 61 6e 64 20 49 6e 74 65 72 62 61 73 65  orland Interbase
2920: 20 64 6f 65 73 20 6e 6f 74 20 73 75 70 70 6f 72   does not suppor
2930: 74 20 43 41 53 45 20 65 78 70 72 65 73 73 69 6f  t CASE expressio
2940: 6e 73 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  ns.</td>.</tr>.<
2950: 2f 74 61 62 6c 65 3e 0a 3c 62 72 20 63 6c 65 61  /table>.<br clea
2960: 72 3d 22 62 6f 74 68 22 3e 0a 0a 3c 70 3e 26 6e  r="both">..<p>&n
2970: 62 73 70 3b 3c 2f 70 3e 0a 3c 70 3e 0a 54 68 65  bsp;</p>.<p>.The
2980: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 63 72 69 70   following scrip
2990: 74 20 77 61 73 20 75 73 65 64 20 74 6f 20 67 61  t was used to ga
29a0: 74 68 65 72 20 69 6e 66 6f 72 6d 61 74 69 6f 6e  ther information
29b0: 20 66 6f 72 20 74 68 65 20 74 61 62 6c 65 0a 61   for the table.a
29c0: 62 6f 76 65 2e 0a 3c 2f 70 3e 0a 0a 3c 70 72 65  bove..</p>..<pre
29d0: 3e 0a 2d 2d 20 49 20 68 61 76 65 20 61 62 6f 75  >.-- I have abou
29e0: 74 20 64 65 63 69 64 65 64 20 74 68 61 74 20 53  t decided that S
29f0: 51 4c 27 73 20 74 72 65 61 74 6d 65 6e 74 20 6f  QL's treatment o
2a00: 66 20 4e 55 4c 4c 73 20 69 73 20 63 61 70 72 69  f NULLs is capri
2a10: 63 69 6f 75 73 20 61 6e 64 20 63 61 6e 6e 6f 74  cious and cannot
2a20: 20 62 65 0a 2d 2d 20 64 65 64 75 63 65 64 20 62   be.-- deduced b
2a30: 79 20 6c 6f 67 69 63 2e 20 20 49 74 20 6d 75 73  y logic.  It mus
2a40: 74 20 62 65 20 64 69 73 63 6f 76 65 72 65 64 20  t be discovered 
2a50: 62 79 20 65 78 70 65 72 69 6d 65 6e 74 2e 20 20  by experiment.  
2a60: 54 6f 20 74 68 61 74 20 65 6e 64 2c 20 49 20 68  To that end, I h
2a70: 61 76 65 20 0a 2d 2d 20 70 72 65 70 61 72 65 64  ave .-- prepared
2a80: 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73   the following s
2a90: 63 72 69 70 74 20 74 6f 20 74 65 73 74 20 68 6f  cript to test ho
2aa0: 77 20 76 61 72 69 6f 75 73 20 53 51 4c 20 64 61  w various SQL da
2ab0: 74 61 62 61 73 65 73 20 64 65 61 6c 20 77 69 74  tabases deal wit
2ac0: 68 20 4e 55 4c 4c 2e 0a 2d 2d 20 4d 79 20 61 69  h NULL..-- My ai
2ad0: 6d 20 69 73 20 74 6f 20 75 73 65 20 74 68 65 20  m is to use the 
2ae0: 69 6e 66 6f 72 6d 61 74 69 6f 6e 20 67 61 74 68  information gath
2af0: 65 72 20 66 72 6f 6d 20 74 68 69 73 20 73 63 72  er from this scr
2b00: 69 70 74 20 74 6f 20 6d 61 6b 65 20 53 51 4c 69  ipt to make SQLi
2b10: 74 65 20 61 73 20 6d 75 63 68 0a 2d 2d 20 6c 69  te as much.-- li
2b20: 6b 65 20 6f 74 68 65 72 20 64 61 74 61 62 61 73  ke other databas
2b30: 65 73 20 61 73 20 70 6f 73 73 69 62 6c 65 2e 0a  es as possible..
2b40: 2d 2d 0a 2d 2d 20 49 66 20 79 6f 75 20 63 6f 75  --.-- If you cou
2b50: 6c 64 20 70 6c 65 61 73 65 20 72 75 6e 20 74 68  ld please run th
2b60: 69 73 20 73 63 72 69 70 74 20 69 6e 20 79 6f 75  is script in you
2b70: 72 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  r database engin
2b80: 65 20 61 6e 64 20 6d 61 69 6c 20 74 68 65 20 72  e and mail the r
2b90: 65 73 75 6c 74 73 0a 2d 2d 20 74 6f 20 6d 65 20  esults.-- to me 
2ba0: 61 74 20 64 72 68 40 68 77 61 63 69 2e 63 6f 6d  at drh@hwaci.com
2bb0: 2c 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20 61  , that will be a
2bc0: 20 62 69 67 20 68 65 6c 70 2e 20 20 50 6c 65 61   big help.  Plea
2bd0: 73 65 20 62 65 20 73 75 72 65 20 74 6f 20 69 64  se be sure to id
2be0: 65 6e 74 69 66 79 20 74 68 65 0a 2d 2d 20 64 61  entify the.-- da
2bf0: 74 61 62 61 73 65 20 65 6e 67 69 6e 65 20 79 6f  tabase engine yo
2c00: 75 20 75 73 65 20 66 6f 72 20 74 68 69 73 20 74  u use for this t
2c10: 65 73 74 2e 20 20 54 68 61 6e 6b 73 2e 0a 2d 2d  est.  Thanks..--
2c20: 0a 2d 2d 20 49 66 20 79 6f 75 20 68 61 76 65 20  .-- If you have 
2c30: 74 6f 20 63 68 61 6e 67 65 20 61 6e 79 74 68 69  to change anythi
2c40: 6e 67 20 74 6f 20 67 65 74 20 74 68 69 73 20 73  ng to get this s
2c50: 63 72 69 70 74 20 74 6f 20 72 75 6e 20 77 69 74  cript to run wit
2c60: 68 20 79 6f 75 72 20 64 61 74 61 62 61 73 65 0a  h your database.
2c70: 2d 2d 20 65 6e 67 69 6e 65 2c 20 70 6c 65 61 73  -- engine, pleas
2c80: 65 20 73 65 6e 64 20 79 6f 75 72 20 72 65 76 69  e send your revi
2c90: 73 65 64 20 73 63 72 69 70 74 20 74 6f 67 65 74  sed script toget
2ca0: 68 65 72 20 77 69 74 68 20 79 6f 75 72 20 72 65  her with your re
2cb0: 73 75 6c 74 73 2e 0a 2d 2d 0a 0a 2d 2d 20 43 72  sults..--..-- Cr
2cc0: 65 61 74 65 20 61 20 74 65 73 74 20 74 61 62 6c  eate a test tabl
2cd0: 65 20 77 69 74 68 20 64 61 74 61 0a 63 72 65 61  e with data.crea
2ce0: 74 65 20 74 61 62 6c 65 20 74 31 28 61 20 69 6e  te table t1(a in
2cf0: 74 2c 20 62 20 69 6e 74 2c 20 63 20 69 6e 74 29  t, b int, c int)
2d00: 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31  ;.insert into t1
2d10: 20 76 61 6c 75 65 73 28 31 2c 30 2c 30 29 3b 0a   values(1,0,0);.
2d20: 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76  insert into t1 v
2d30: 61 6c 75 65 73 28 32 2c 30 2c 31 29 3b 0a 69 6e  alues(2,0,1);.in
2d40: 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c  sert into t1 val
2d50: 75 65 73 28 33 2c 31 2c 30 29 3b 0a 69 6e 73 65  ues(3,1,0);.inse
2d60: 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65  rt into t1 value
2d70: 73 28 34 2c 31 2c 31 29 3b 0a 69 6e 73 65 72 74  s(4,1,1);.insert
2d80: 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 28   into t1 values(
2d90: 35 2c 6e 75 6c 6c 2c 30 29 3b 0a 69 6e 73 65 72  5,null,0);.inser
2da0: 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73  t into t1 values
2db0: 28 36 2c 6e 75 6c 6c 2c 31 29 3b 0a 69 6e 73 65  (6,null,1);.inse
2dc0: 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c 75 65  rt into t1 value
2dd0: 73 28 37 2c 6e 75 6c 6c 2c 6e 75 6c 6c 29 3b 0a  s(7,null,null);.
2de0: 0a 2d 2d 20 43 68 65 63 6b 20 74 6f 20 73 65 65  .-- Check to see
2df0: 20 77 68 61 74 20 43 41 53 45 20 64 6f 65 73 20   what CASE does 
2e00: 77 69 74 68 20 4e 55 4c 4c 73 20 69 6e 20 69 74  with NULLs in it
2e10: 73 20 74 65 73 74 20 65 78 70 72 65 73 73 69 6f  s test expressio
2e20: 6e 73 0a 73 65 6c 65 63 74 20 61 2c 20 63 61 73  ns.select a, cas
2e30: 65 20 77 68 65 6e 20 62 3c 3e 30 20 74 68 65 6e  e when b<>0 then
2e40: 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72   1 else 0 end fr
2e50: 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b  om t1;.select a+
2e60: 31 30 2c 20 63 61 73 65 20 77 68 65 6e 20 6e 6f  10, case when no
2e70: 74 20 62 3c 3e 30 20 74 68 65 6e 20 31 20 65 6c  t b<>0 then 1 el
2e80: 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20 74 31  se 0 end from t1
2e90: 3b 0a 73 65 6c 65 63 74 20 61 2b 32 30 2c 20 63  ;.select a+20, c
2ea0: 61 73 65 20 77 68 65 6e 20 62 3c 3e 30 20 61 6e  ase when b<>0 an
2eb0: 64 20 63 3c 3e 30 20 74 68 65 6e 20 31 20 65 6c  d c<>0 then 1 el
2ec0: 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20 74 31  se 0 end from t1
2ed0: 3b 0a 73 65 6c 65 63 74 20 61 2b 33 30 2c 20 63  ;.select a+30, c
2ee0: 61 73 65 20 77 68 65 6e 20 6e 6f 74 20 28 62 3c  ase when not (b<
2ef0: 3e 30 20 61 6e 64 20 63 3c 3e 30 29 20 74 68 65  >0 and c<>0) the
2f00: 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66  n 1 else 0 end f
2f10: 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61  rom t1;.select a
2f20: 2b 34 30 2c 20 63 61 73 65 20 77 68 65 6e 20 62  +40, case when b
2f30: 3c 3e 30 20 6f 72 20 63 3c 3e 30 20 74 68 65 6e  <>0 or c<>0 then
2f40: 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72   1 else 0 end fr
2f50: 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b  om t1;.select a+
2f60: 35 30 2c 20 63 61 73 65 20 77 68 65 6e 20 6e 6f  50, case when no
2f70: 74 20 28 62 3c 3e 30 20 6f 72 20 63 3c 3e 30 29  t (b<>0 or c<>0)
2f80: 20 74 68 65 6e 20 31 20 65 6c 73 65 20 30 20 65   then 1 else 0 e
2f90: 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65  nd from t1;.sele
2fa0: 63 74 20 61 2b 36 30 2c 20 63 61 73 65 20 62 20  ct a+60, case b 
2fb0: 77 68 65 6e 20 63 20 74 68 65 6e 20 31 20 65 6c  when c then 1 el
2fc0: 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20 74 31  se 0 end from t1
2fd0: 3b 0a 73 65 6c 65 63 74 20 61 2b 37 30 2c 20 63  ;.select a+70, c
2fe0: 61 73 65 20 63 20 77 68 65 6e 20 62 20 74 68 65  ase c when b the
2ff0: 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66  n 1 else 0 end f
3000: 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20 57 68 61 74  rom t1;..-- What
3010: 20 68 61 70 70 65 6e 73 20 77 68 65 6e 20 79 6f   happens when yo
3020: 75 20 6d 75 6c 74 69 70 6c 65 20 61 20 4e 55 4c  u multiple a NUL
3030: 4c 20 62 79 20 7a 65 72 6f 3f 0a 73 65 6c 65 63  L by zero?.selec
3040: 74 20 61 2b 38 30 2c 20 62 2a 30 20 66 72 6f 6d  t a+80, b*0 from
3050: 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 39 30   t1;.select a+90
3060: 2c 20 62 2a 63 20 66 72 6f 6d 20 74 31 3b 0a 0a  , b*c from t1;..
3070: 2d 2d 20 57 68 61 74 20 68 61 70 70 65 6e 73 20  -- What happens 
3080: 74 6f 20 4e 55 4c 4c 20 66 6f 72 20 6f 74 68 65  to NULL for othe
3090: 72 20 6f 70 65 72 61 74 6f 72 73 3f 0a 73 65 6c  r operators?.sel
30a0: 65 63 74 20 61 2b 31 30 30 2c 20 62 2b 63 20 66  ect a+100, b+c f
30b0: 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20 54 65 73 74  rom t1;..-- Test
30c0: 20 74 68 65 20 74 72 65 61 74 6d 65 6e 74 20 6f   the treatment o
30d0: 66 20 61 67 67 72 65 67 61 74 65 20 6f 70 65 72  f aggregate oper
30e0: 61 74 6f 72 73 0a 73 65 6c 65 63 74 20 63 6f 75  ators.select cou
30f0: 6e 74 28 2a 29 2c 20 63 6f 75 6e 74 28 62 29 2c  nt(*), count(b),
3100: 20 73 75 6d 28 62 29 2c 20 61 76 67 28 62 29 2c   sum(b), avg(b),
3110: 20 6d 69 6e 28 62 29 2c 20 6d 61 78 28 62 29 20   min(b), max(b) 
3120: 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20 43 68 65  from t1;..-- Che
3130: 63 6b 20 74 68 65 20 62 65 68 61 76 69 6f 72 20  ck the behavior 
3140: 6f 66 20 4e 55 4c 4c 73 20 69 6e 20 57 48 45 52  of NULLs in WHER
3150: 45 20 63 6c 61 75 73 65 73 0a 73 65 6c 65 63 74  E clauses.select
3160: 20 61 2b 31 31 30 20 66 72 6f 6d 20 74 31 20 77   a+110 from t1 w
3170: 68 65 72 65 20 62 3c 31 30 3b 0a 73 65 6c 65 63  here b<10;.selec
3180: 74 20 61 2b 31 32 30 20 66 72 6f 6d 20 74 31 20  t a+120 from t1 
3190: 77 68 65 72 65 20 6e 6f 74 20 62 3e 31 30 3b 0a  where not b>10;.
31a0: 73 65 6c 65 63 74 20 61 2b 31 33 30 20 66 72 6f  select a+130 fro
31b0: 6d 20 74 31 20 77 68 65 72 65 20 62 3c 31 30 20  m t1 where b<10 
31c0: 4f 52 20 63 3d 31 3b 0a 73 65 6c 65 63 74 20 61  OR c=1;.select a
31d0: 2b 31 34 30 20 66 72 6f 6d 20 74 31 20 77 68 65  +140 from t1 whe
31e0: 72 65 20 62 3c 31 30 20 41 4e 44 20 63 3d 31 3b  re b<10 AND c=1;
31f0: 0a 73 65 6c 65 63 74 20 61 2b 31 35 30 20 66 72  .select a+150 fr
3200: 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20  om t1 where not 
3210: 28 62 3c 31 30 20 41 4e 44 20 63 3d 31 29 3b 0a  (b<10 AND c=1);.
3220: 73 65 6c 65 63 74 20 61 2b 31 36 30 20 66 72 6f  select a+160 fro
3230: 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 28  m t1 where not (
3240: 63 3d 31 20 41 4e 44 20 62 3c 31 30 29 3b 0a 0a  c=1 AND b<10);..
3250: 2d 2d 20 43 68 65 63 6b 20 74 68 65 20 62 65 68  -- Check the beh
3260: 61 76 69 6f 72 20 6f 66 20 4e 55 4c 4c 73 20 69  avior of NULLs i
3270: 6e 20 61 20 44 49 53 54 49 4e 43 54 20 71 75 65  n a DISTINCT que
3280: 72 79 0a 73 65 6c 65 63 74 20 64 69 73 74 69 6e  ry.select distin
3290: 63 74 20 62 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d  ct b from t1;..-
32a0: 2d 20 43 68 65 63 6b 20 74 68 65 20 62 65 68 61  - Check the beha
32b0: 76 69 6f 72 20 6f 66 20 4e 55 4c 4c 73 20 69 6e  vior of NULLs in
32c0: 20 61 20 55 4e 49 4f 4e 20 71 75 65 72 79 0a 73   a UNION query.s
32d0: 65 6c 65 63 74 20 62 20 66 72 6f 6d 20 74 31 20  elect b from t1 
32e0: 75 6e 69 6f 6e 20 73 65 6c 65 63 74 20 62 20 66  union select b f
32f0: 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20 43 72 65 61  rom t1;..-- Crea
3300: 74 65 20 61 20 6e 65 77 20 74 61 62 6c 65 20 77  te a new table w
3310: 69 74 68 20 61 20 75 6e 69 71 75 65 20 63 6f 6c  ith a unique col
3320: 75 6d 6e 2e 20 20 43 68 65 63 6b 20 74 6f 20 73  umn.  Check to s
3330: 65 65 20 69 66 20 4e 55 4c 4c 73 20 61 72 65 20  ee if NULLs are 
3340: 63 6f 6e 73 69 64 65 72 65 64 0a 2d 2d 20 74 6f  considered.-- to
3350: 20 62 65 20 64 69 73 74 69 6e 63 74 2e 0a 63 72   be distinct..cr
3360: 65 61 74 65 20 74 61 62 6c 65 20 74 32 28 61 20  eate table t2(a 
3370: 69 6e 74 2c 20 62 20 69 6e 74 20 75 6e 69 71 75  int, b int uniqu
3380: 65 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20  e);.insert into 
3390: 74 32 20 76 61 6c 75 65 73 28 31 2c 31 29 3b 0a  t2 values(1,1);.
33a0: 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 32 20 76  insert into t2 v
33b0: 61 6c 75 65 73 28 32 2c 6e 75 6c 6c 29 3b 0a 69  alues(2,null);.i
33c0: 6e 73 65 72 74 20 69 6e 74 6f 20 74 32 20 76 61  nsert into t2 va
33d0: 6c 75 65 73 28 33 2c 6e 75 6c 6c 29 3b 0a 73 65  lues(3,null);.se
33e0: 6c 65 63 74 20 2a 20 66 72 6f 6d 20 74 32 3b 0a  lect * from t2;.
33f0: 0a 64 72 6f 70 20 74 61 62 6c 65 20 74 31 3b 0a  .drop table t1;.
3400: 64 72 6f 70 20 74 61 62 6c 65 20 74 32 3b 0a 3c  drop table t2;.<
3410: 2f 70 72 65 3e 0a 7d 0a 0a 66 6f 6f 74 65 72 20  /pre>.}..footer 
3420: 24 72 63 73 69 64 0a                             $rcsid.