/ Hex Artifact Content
Login

Artifact f31330db8c978e675f5cd263067b32b822effa6f:


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 36 20 32 30 30 34  s.tcl,v 1.6 2004
0060: 2f 30 35 2f 33 31 20 31 35 3a 30 36 3a 33 30 20  /05/31 15:06:30 
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 72 69 6d    But the.exprim
0450: 65 6e 74 73 20 72 75 6e 20 6f 6e 20 6f 74 68 65  ents run on othe
0460: 72 20 53 51 4c 20 65 6e 67 69 6e 65 73 20 73 68  r SQL engines sh
0470: 6f 77 65 64 20 74 68 61 74 20 6e 6f 6e 65 20 6f  owed that none o
0480: 66 20 74 68 65 6d 0a 77 6f 72 6b 65 64 20 74 68  f them.worked th
0490: 69 73 20 77 61 79 2e 20 20 53 6f 20 53 51 4c 69  is way.  So SQLi
04a0: 74 65 20 77 61 73 20 6d 6f 64 69 66 69 65 64 20  te was modified 
04b0: 74 6f 20 77 6f 72 6b 20 74 68 65 20 73 61 6d 65  to work the same
04c0: 20 61 73 0a 4f 72 61 63 6c 65 2c 20 50 6f 73 74   as.Oracle, Post
04d0: 67 72 65 53 51 4c 2c 20 61 6e 64 20 44 42 32 2e  greSQL, and DB2.
04e0: 20 20 54 68 69 73 20 69 6e 76 6f 6c 76 65 64 20    This involved 
04f0: 6d 61 6b 69 6e 67 20 4e 55 4c 4c 73 0a 69 6e 64  making NULLs.ind
0500: 69 73 74 69 6e 63 74 20 66 6f 72 20 74 68 65 20  istinct for the 
0510: 70 75 72 70 6f 73 65 73 20 6f 66 20 74 68 65 20  purposes of the 
0520: 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 20  SELECT DISTINCT 
0530: 73 74 61 74 65 6d 65 6e 74 20 61 6e 64 0a 66 6f  statement and.fo
0540: 72 20 74 68 65 20 55 4e 49 4f 4e 20 6f 70 65 72  r the UNION oper
0550: 61 74 6f 72 20 69 6e 20 61 20 53 45 4c 45 43 54  ator in a SELECT
0560: 2e 20 20 4e 55 4c 4c 73 20 61 72 65 20 73 74 69  .  NULLs are sti
0570: 6c 6c 20 64 69 73 74 69 6e 63 74 0a 69 6e 20 61  ll distinct.in a
0580: 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 2e 20   UNIQUE column. 
0590: 20 54 68 69 73 20 73 65 65 6d 73 20 73 6f 6d 65   This seems some
05a0: 77 68 61 74 20 61 72 62 69 74 72 61 72 79 2c 20  what arbitrary, 
05b0: 62 75 74 20 74 68 65 20 64 65 73 69 72 65 0a 74  but the desire.t
05c0: 6f 20 62 65 20 63 6f 6d 70 61 74 69 62 6c 65 20  o be compatible 
05d0: 77 69 74 68 20 6f 74 68 65 72 20 65 6e 67 69 6e  with other engin
05e0: 65 73 20 6f 75 74 77 65 69 67 68 74 65 64 20 74  es outweighted t
05f0: 68 61 74 20 6f 62 6a 65 63 74 69 6f 6e 2e 0a 3c  hat objection..<
0600: 2f 70 3e 0a 0a 3c 70 3e 0a 49 74 20 69 73 20 70  /p>..<p>.It is p
0610: 6f 73 73 69 62 6c 65 20 74 6f 20 6d 61 6b 65 20  ossible to make 
0620: 53 51 4c 69 74 65 20 74 72 65 61 74 20 4e 55 4c  SQLite treat NUL
0630: 4c 73 20 61 73 20 64 69 73 74 69 6e 63 74 20 66  Ls as distinct f
0640: 6f 72 20 74 68 65 0a 70 75 72 70 6f 73 65 73 20  or the.purposes 
0650: 6f 66 20 74 68 65 20 53 45 4c 45 43 54 20 44 49  of the SELECT DI
0660: 53 54 49 4e 43 54 20 61 6e 64 20 55 4e 49 4f 4e  STINCT and UNION
0670: 2e 20 20 54 6f 20 64 6f 20 73 6f 2c 20 6f 6e 65  .  To do so, one
0680: 20 73 68 6f 75 6c 64 0a 63 68 61 6e 67 65 20 74   should.change t
0690: 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
06a0: 4e 55 4c 4c 5f 41 4c 57 41 59 53 5f 44 49 53 54  NULL_ALWAYS_DIST
06b0: 49 4e 43 54 20 23 64 65 66 69 6e 65 20 69 6e 20  INCT #define in 
06c0: 74 68 65 0a 3c 74 74 3e 73 71 6c 69 74 65 49 6e  the.<tt>sqliteIn
06d0: 74 2e 68 3c 2f 74 74 3e 20 73 6f 75 72 63 65 20  t.h</tt> source 
06e0: 66 69 6c 65 20 61 6e 64 20 72 65 63 6f 6d 70 69  file and recompi
06f0: 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c 6f 63 6b  le..</p>..<block
0700: 71 75 6f 74 65 3e 0a 3c 70 3e 0a 3c 69 3e 55 70  quote>.<p>.<i>Up
0710: 64 61 74 65 20 32 30 30 33 2d 30 37 2d 31 33 3a  date 2003-07-13:
0720: 3c 2f 69 3e 0a 53 69 6e 63 65 20 74 68 69 73 20  </i>.Since this 
0730: 64 6f 63 75 6d 65 6e 74 20 77 61 73 20 6f 72 69  document was ori
0740: 67 69 6e 61 6c 6c 79 20 77 72 69 74 74 65 6e 20  ginally written 
0750: 73 6f 6d 65 20 6f 66 20 74 68 65 20 64 61 74 61  some of the data
0760: 62 61 73 65 20 65 6e 67 69 6e 65 73 0a 74 65 73  base engines.tes
0770: 74 65 64 20 68 61 76 65 20 62 65 65 6e 20 75 70  ted have been up
0780: 64 61 74 65 64 20 61 6e 64 20 75 73 65 72 73 20  dated and users 
0790: 68 61 76 65 20 62 65 65 6e 20 6b 69 6e 64 20 65  have been kind e
07a0: 6e 6f 75 67 68 20 74 6f 20 73 65 6e 64 20 69 6e  nough to send in
07b0: 0a 63 6f 72 72 65 63 74 69 6f 6e 73 20 74 6f 20  .corrections to 
07c0: 74 68 65 20 63 68 61 72 74 20 62 65 6c 6f 77 2e  the chart below.
07d0: 20 20 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 64    The original d
07e0: 61 74 61 20 73 68 6f 77 65 64 20 61 20 77 69 64  ata showed a wid
07f0: 65 20 76 61 72 69 65 74 79 0a 6f 66 20 62 65 68  e variety.of beh
0800: 61 76 69 6f 72 73 2c 20 62 75 74 20 6f 76 65 72  aviors, but over
0810: 20 74 69 6d 65 20 74 68 65 20 72 61 6e 67 65 20   time the range 
0820: 6f 66 20 62 65 68 61 76 69 6f 72 73 20 68 61 73  of behaviors has
0830: 20 63 6f 6e 76 65 72 67 65 64 20 74 6f 77 61 72   converged towar
0840: 64 0a 74 68 65 20 50 6f 73 74 67 72 65 53 51 4c  d.the PostgreSQL
0850: 2f 4f 72 61 63 6c 65 20 6d 6f 64 65 6c 2e 20 20  /Oracle model.  
0860: 54 68 65 20 6f 6e 6c 79 20 73 69 67 6e 69 66 69  The only signifi
0870: 63 61 6e 74 20 64 69 66 66 65 72 65 6e 63 65 20  cant difference 
0880: 0a 69 73 20 74 68 61 74 20 49 6e 66 6f 72 6d 69  .is that Informi
0890: 78 20 61 6e 64 20 4d 53 2d 53 51 4c 20 62 6f 74  x and MS-SQL bot
08a0: 68 20 74 68 72 65 61 74 20 4e 55 4c 4c 73 20 61  h threat NULLs a
08b0: 73 0a 69 6e 64 69 73 74 69 6e 63 74 20 69 6e 20  s.indistinct in 
08c0: 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 2e  a UNIQUE column.
08d0: 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68 65 20 66  .</p>..<p>.The f
08e0: 61 63 74 20 74 68 61 74 20 4e 55 4c 4c 73 20 61  act that NULLs a
08f0: 72 65 20 64 69 73 74 69 6e 63 74 20 66 6f 72 20  re distinct for 
0900: 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 73 20 62  UNIQUE columns b
0910: 75 74 20 61 72 65 20 69 6e 64 69 73 74 69 6e 63  ut are indistinc
0920: 74 20 66 6f 72 0a 53 45 4c 45 43 54 20 44 49 53  t for.SELECT DIS
0930: 54 49 4e 43 54 20 61 6e 64 20 55 4e 49 4f 4e 20  TINCT and UNION 
0940: 63 6f 6e 74 69 6e 75 65 73 20 74 6f 20 62 65 20  continues to be 
0950: 70 75 7a 7a 6c 69 6e 67 2e 20 20 49 74 20 73 65  puzzling.  It se
0960: 65 6d 73 20 74 68 61 74 20 4e 55 4c 4c 73 0a 73  ems that NULLs.s
0970: 68 6f 75 6c 64 20 62 65 20 65 69 74 68 65 72 20  hould be either 
0980: 64 69 73 74 69 6e 63 74 20 65 76 65 72 79 77 68  distinct everywh
0990: 65 72 65 20 6f 72 20 6e 6f 77 68 65 72 65 2e 20  ere or nowhere. 
09a0: 20 41 6e 64 20 74 68 65 20 53 51 4c 20 73 74 61   And the SQL sta
09b0: 6e 64 61 72 64 73 0a 64 6f 63 75 6d 65 6e 74 73  ndards.documents
09c0: 20 73 75 67 67 65 73 74 20 74 68 61 74 20 4e 55   suggest that NU
09d0: 4c 4c 73 20 73 68 6f 75 6c 64 20 62 65 20 64 69  LLs should be di
09e0: 73 74 69 6e 63 74 20 65 76 65 72 79 77 68 65 72  stinct everywher
09f0: 65 2e 20 20 59 65 74 20 61 73 20 6f 66 0a 74 68  e.  Yet as of.th
0a00: 69 73 20 77 72 69 74 69 6e 67 2c 20 6e 6f 20 53  is writing, no S
0a10: 51 4c 20 65 6e 67 69 6e 65 20 74 65 73 74 65 64  QL engine tested
0a20: 20 74 72 65 61 74 73 20 4e 55 4c 4c 73 20 61 73   treats NULLs as
0a30: 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20 53   distinct in a S
0a40: 45 4c 45 43 54 0a 44 49 53 54 49 4e 43 54 20 73  ELECT.DISTINCT s
0a50: 74 61 74 65 6d 65 6e 74 20 6f 72 20 69 6e 20 61  tatement or in a
0a60: 20 55 4e 49 4f 4e 2e 0a 3c 2f 70 3e 0a 3c 2f 62   UNION..</p>.</b
0a70: 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 0a 3c 70 3e  lockquote>...<p>
0a80: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 74  .The following t
0a90: 61 62 6c 65 20 73 68 6f 77 73 20 74 68 65 20 72  able shows the r
0aa0: 65 73 75 6c 74 73 20 6f 66 20 74 68 65 20 4e 55  esults of the NU
0ab0: 4c 4c 20 68 61 6e 64 6c 69 6e 67 20 65 78 70 65  LL handling expe
0ac0: 72 69 6d 65 6e 74 73 2e 0a 3c 2f 70 3e 0a 0a 3c  riments..</p>..<
0ad0: 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20 63  table border=1 c
0ae0: 65 6c 6c 70 61 64 64 69 6e 67 3d 33 20 77 69 64  ellpadding=3 wid
0af0: 74 68 3d 22 31 30 30 25 22 3e 0a 3c 74 72 3e 3c  th="100%">.<tr><
0b00: 74 68 3e 26 6e 62 73 70 26 6e 62 73 70 3b 3c 2f  th>&nbsp&nbsp;</
0b10: 74 68 3e 0a 3c 74 68 3e 53 51 4c 69 74 65 3c 2f  th>.<th>SQLite</
0b20: 74 68 3e 0a 3c 74 68 3e 50 6f 73 74 67 72 65 53  th>.<th>PostgreS
0b30: 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f 72 61 63  QL</th>.<th>Orac
0b40: 6c 65 3c 2f 74 68 3e 0a 3c 74 68 3e 49 6e 66 6f  le</th>.<th>Info
0b50: 72 6d 69 78 3c 2f 74 68 3e 0a 3c 74 68 3e 44 42  rmix</th>.<th>DB
0b60: 32 3c 2f 74 68 3e 0a 3c 74 68 3e 4d 53 2d 53 51  2</th>.<th>MS-SQ
0b70: 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f 43 45 4c 4f  L</th>.<th>OCELO
0b80: 54 3c 2f 74 68 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74  T</th>.</tr>..<t
0b90: 72 3e 3c 74 64 3e 41 64 64 69 6e 67 20 61 6e 79  r><td>Adding any
0ba0: 74 68 69 6e 67 20 74 6f 20 6e 75 6c 6c 20 67 69  thing to null gi
0bb0: 76 65 73 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74  ves null</td>.<t
0bc0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
0bd0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
0be0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
0bf0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
0c00: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
0c10: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
0c20: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
0c30: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
0c40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
0c50: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
0c60: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
0c70: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
0c80: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
0c90: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
0ca0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
0cb0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0cc0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0cd0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0ce0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
0cf0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
0d00: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
0d10: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
0d20: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
0d30: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
0d40: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
0d50: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
0d60: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0d70: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 75  </tr>.<tr><td>Mu
0d80: 6c 74 69 70 6c 79 69 6e 67 20 6e 75 6c 6c 20 62  ltiplying null b
0d90: 79 20 7a 65 72 6f 20 67 69 76 65 73 20 6e 75 6c  y zero gives nul
0da0: 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  l</td>.<td valig
0db0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
0dc0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
0dd0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
0de0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
0df0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
0e00: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
0e10: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
0e20: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
0e30: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
0e40: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
0e50: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
0e60: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
0e70: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
0e80: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
0e90: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
0ea0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
0eb0: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
0ec0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
0ed0: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
0ee0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
0ef0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
0f00: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
0f10: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
0f20: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
0f30: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
0f40: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
0f50: 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  Yes</td>.</tr>.<
0f60: 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65  tr><td>nulls are
0f70: 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20 55   distinct in a U
0f80: 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 3c 2f 74 64  NIQUE column</td
0f90: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
0fa0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
0fb0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
0fc0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0fd0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0fe0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0ff0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1000: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1010: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1020: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1030: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1040: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1050: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1060: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1070: 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22  gcolor="#c7a9a9"
1080: 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  >No</td>.<td val
1090: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
10a0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
10b0: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
10c0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
10d0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
10e0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
10f0: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f  r="#c7a9a9">No</
1100: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1110: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1120: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1130: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1140: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  >.</tr>.<tr><td>
1150: 6e 75 6c 6c 73 20 61 72 65 20 64 69 73 74 69 6e  nulls are distin
1160: 63 74 20 69 6e 20 53 45 4c 45 43 54 20 44 49 53  ct in SELECT DIS
1170: 54 49 4e 43 54 3c 2f 74 64 3e 0a 3c 74 64 20 76  TINCT</td>.<td v
1180: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1190: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
11a0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
11b0: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
11c0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
11d0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
11e0: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
11f0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1200: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1210: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1220: 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64  "#c7a9a9">No</td
1230: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1240: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1250: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63  ter" bgcolor="#c
1260: 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c  7a9a9">No</td>.<
1270: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1280: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1290: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
12a0: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20  a9">No</td>.<td 
12b0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
12c0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
12d0: 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22  gcolor="#c7a9a9"
12e0: 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  >No</td>.<td val
12f0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1300: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1310: 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f  lor="#c7a9a9">No
1320: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
1330: 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64 69  <td>nulls are di
1340: 73 74 69 6e 63 74 20 69 6e 20 61 20 55 4e 49 4f  stinct in a UNIO
1350: 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  N</td>.<td valig
1360: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1370: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1380: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f  r="#c7a9a9">No</
1390: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
13a0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
13b0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
13c0: 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e  #c7a9a9">No</td>
13d0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
13e0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
13f0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
1400: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
1410: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1420: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1430: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
1440: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
1450: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1460: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1470: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1480: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
1490: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
14a0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
14b0: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
14c0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
14d0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
14e0: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
14f0: 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64  "#c7a9a9">No</td
1500: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  >.</tr>.<tr><td>
1510: 22 43 41 53 45 20 57 48 45 4e 20 6e 75 6c 6c 20  "CASE WHEN null 
1520: 54 48 45 4e 20 31 20 45 4c 53 45 20 30 20 45 4e  THEN 1 ELSE 0 EN
1530: 44 22 20 69 73 20 30 3f 3c 2f 74 64 3e 0a 3c 74  D" is 0?</td>.<t
1540: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1550: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1560: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1570: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1580: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1590: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
15a0: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
15b0: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
15c0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
15d0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
15e0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
15f0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1600: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1610: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1620: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1630: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1640: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1650: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1660: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1670: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1680: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1690: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
16a0: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
16b0: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
16c0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
16d0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
16e0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
16f0: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e  </tr>.<tr><td>"n
1700: 75 6c 6c 20 4f 52 20 74 72 75 65 22 20 69 73 20  ull OR true" is 
1710: 74 72 75 65 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  true</td>.<td va
1720: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1730: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1740: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
1750: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
1760: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1770: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1780: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1790: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
17a0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
17b0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
17c0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
17d0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
17e0: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
17f0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1800: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1810: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1820: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1830: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1840: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1850: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1860: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1870: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1880: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1890: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
18a0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
18b0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
18c0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72  9">Yes</td>.</tr
18d0: 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e 6f 74 20 28  >.<tr><td>"not (
18e0: 6e 75 6c 6c 20 41 4e 44 20 66 61 6c 73 65 29 22  null AND false)"
18f0: 20 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a 3c 74   is true</td>.<t
1900: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1910: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1920: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1930: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
1940: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1950: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1960: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1970: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1980: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1990: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
19a0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
19b0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
19c0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
19d0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
19e0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
19f0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1a00: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1a10: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1a20: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1a30: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1a40: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1a50: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1a60: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1a70: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1a80: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1a90: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1aa0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1ab0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 0a  </tr>.</table>..
1ac0: 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d 31 20  <table border=1 
1ad0: 63 65 6c 6c 70 61 64 64 69 6e 67 3d 33 20 77 69  cellpadding=3 wi
1ae0: 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c 74 72 3e  dth="100%">.<tr>
1af0: 3c 74 68 3e 26 6e 62 73 70 26 6e 62 73 70 3b 3c  <th>&nbsp&nbsp;<
1b00: 2f 74 68 3e 0a 3c 74 68 3e 4d 79 53 51 4c 3c 62  /th>.<th>MySQL<b
1b10: 72 3e 33 2e 32 33 2e 34 31 3c 2f 74 68 3e 0a 3c  r>3.23.41</th>.<
1b20: 74 68 3e 4d 79 53 51 4c 3c 62 72 3e 34 2e 30 2e  th>MySQL<br>4.0.
1b30: 31 36 3c 2f 74 68 3e 0a 3c 74 68 3e 46 69 72 65  16</th>.<th>Fire
1b40: 62 69 72 64 3c 2f 74 68 3e 0a 3c 74 68 3e 53 51  bird</th>.<th>SQ
1b50: 4c 3c 62 72 3e 41 6e 79 77 68 65 72 65 3c 2f 74  L<br>Anywhere</t
1b60: 68 3e 0a 3c 74 68 3e 42 6f 72 6c 61 6e 64 3c 62  h>.<th>Borland<b
1b70: 72 3e 49 6e 74 65 72 62 61 73 65 3c 2f 74 68 3e  r>Interbase</th>
1b80: 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c 74 64 3e  .</tr>..<tr><td>
1b90: 41 64 64 69 6e 67 20 61 6e 79 74 68 69 6e 67 20  Adding anything 
1ba0: 74 6f 20 6e 75 6c 6c 20 67 69 76 65 73 20 6e 75  to null gives nu
1bb0: 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ll</td>.<td vali
1bc0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1bd0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1be0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1bf0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1c00: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1c10: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1c20: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1c30: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1c40: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1c50: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1c60: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1c70: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1c80: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1c90: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1ca0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1cb0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1cc0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1cd0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1ce0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f  7a9">Yes</td>.</
1cf0: 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d 75 6c 74  tr>.<tr><td>Mult
1d00: 69 70 6c 79 69 6e 67 20 6e 75 6c 6c 20 62 79 20  iplying null by 
1d10: 7a 65 72 6f 20 67 69 76 65 73 20 6e 75 6c 6c 3c  zero gives null<
1d20: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1d30: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1d40: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1d50: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1d60: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1d70: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
1d80: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
1d90: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
1da0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1db0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1dc0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
1dd0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1de0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1df0: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1e00: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
1e10: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
1e20: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1e30: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1e40: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
1e50: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  ">Yes</td>.</tr>
1e60: 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61  .<tr><td>nulls a
1e70: 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61  re distinct in a
1e80: 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 3c 2f   UNIQUE column</
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: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1f10: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1f20: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1f30: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1f40: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
1f50: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1f60: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1f70: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64   bgcolor="#aaaad
1f80: 32 22 3e 28 4e 6f 74 65 20 34 29 3c 2f 74 64 3e  2">(Note 4)</td>
1f90: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1fa0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1fb0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61  er" bgcolor="#aa
1fc0: 61 61 64 32 22 3e 28 4e 6f 74 65 20 34 29 3c 2f  aad2">(Note 4)</
1fd0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
1fe0: 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64 69 73 74  d>nulls are dist
1ff0: 69 6e 63 74 20 69 6e 20 53 45 4c 45 43 54 20 44  inct in SELECT D
2000: 49 53 54 49 4e 43 54 3c 2f 74 64 3e 0a 3c 74 64  ISTINCT</td>.<td
2010: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
2020: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
2030: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
2040: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
2050: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2060: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2070: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
2080: 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  o</td>.<td valig
2090: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
20a0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
20b0: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 20 28  r="#c7a9a9">No (
20c0: 4e 6f 74 65 20 31 29 3c 2f 74 64 3e 0a 3c 74 64  Note 1)</td>.<td
20d0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
20e0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
20f0: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
2100: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
2110: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2120: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2130: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
2140: 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  o</td>.</tr>.<tr
2150: 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64  ><td>nulls are d
2160: 69 73 74 69 6e 63 74 20 69 6e 20 61 20 55 4e 49  istinct in a UNI
2170: 4f 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ON</td>.<td vali
2180: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
2190: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
21a0: 6f 72 3d 22 23 61 61 61 61 64 32 22 3e 28 4e 6f  or="#aaaad2">(No
21b0: 74 65 20 33 29 3c 2f 74 64 3e 0a 3c 74 64 20 76  te 3)</td>.<td v
21c0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
21d0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
21e0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
21f0: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
2200: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
2210: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
2220: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 20  or="#c7a9a9">No 
2230: 28 4e 6f 74 65 20 31 29 3c 2f 74 64 3e 0a 3c 74  (Note 1)</td>.<t
2240: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2250: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2260: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
2270: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
2280: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
2290: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
22a0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
22b0: 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74  No</td>.</tr>.<t
22c0: 72 3e 3c 74 64 3e 22 43 41 53 45 20 57 48 45 4e  r><td>"CASE WHEN
22d0: 20 6e 75 6c 6c 20 54 48 45 4e 20 31 20 45 4c 53   null THEN 1 ELS
22e0: 45 20 30 20 45 4e 44 22 20 69 73 20 30 3f 3c 2f  E 0 END" is 0?</
22f0: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
2300: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
2310: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
2320: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
2330: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
2340: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
2350: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
2360: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
2370: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
2380: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
2390: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
23a0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
23b0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
23c0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
23d0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
23e0: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
23f0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
2400: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
2410: 67 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64 32 22  gcolor="#aaaad2"
2420: 3e 28 4e 6f 74 65 20 35 29 3c 2f 74 64 3e 0a 3c  >(Note 5)</td>.<
2430: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e 75  /tr>.<tr><td>"nu
2440: 6c 6c 20 4f 52 20 74 72 75 65 22 20 69 73 20 74  ll OR true" is t
2450: 72 75 65 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  rue</td>.<td val
2460: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
2470: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
2480: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
2490: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
24a0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
24b0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
24c0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
24d0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
24e0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
24f0: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
2500: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
2510: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
2520: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
2530: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
2540: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
2550: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
2560: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
2570: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
2580: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
2590: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e 6f  /tr>.<tr><td>"no
25a0: 74 20 28 6e 75 6c 6c 20 41 4e 44 20 66 61 6c 73  t (null AND fals
25b0: 65 29 22 20 69 73 20 74 72 75 65 3c 2f 74 64 3e  e)" is true</td>
25c0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
25d0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
25e0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
25f0: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
2600: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2610: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2620: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
2630: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20  9">Yes</td>.<td 
2640: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
2650: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
2660: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
2670: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
2680: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2690: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
26a0: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
26b0: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
26c0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
26d0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
26e0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
26f0: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61  </td>.</tr>.</ta
2700: 62 6c 65 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72  ble>..<table bor
2710: 64 65 72 3d 30 20 61 6c 69 67 6e 3d 22 72 69 67  der=0 align="rig
2720: 68 74 22 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d  ht" cellpadding=
2730: 30 20 63 65 6c 6c 73 70 61 63 69 6e 67 3d 30 3e  0 cellspacing=0>
2740: 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  .<tr>.<td valign
2750: 3d 22 74 6f 70 22 20 72 6f 77 73 70 61 6e 3d 35  ="top" rowspan=5
2760: 3e 4e 6f 74 65 73 3a 26 6e 62 73 70 3b 26 6e 62  >Notes:&nbsp;&nb
2770: 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 31 2e 26  sp;</td>.<td>1.&
2780: 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e 4f  nbsp;</td>.<td>O
2790: 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66  lder versions of
27a0: 20 66 69 72 65 62 69 72 64 20 6f 6d 69 74 73 20   firebird omits 
27b0: 61 6c 6c 20 4e 55 4c 4c 73 20 66 72 6f 6d 20 53  all NULLs from S
27c0: 45 4c 45 43 54 20 44 49 53 54 49 4e 43 54 0a 61  ELECT DISTINCT.a
27d0: 6e 64 20 66 72 6f 6d 20 55 4e 49 4f 4e 2e 3c 2f  nd from UNION.</
27e0: 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74  td>.</tr>.<tr><t
27f0: 64 3e 32 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a  d>2.&nbsp;</td>.
2800: 3c 74 64 3e 54 65 73 74 20 64 61 74 61 20 75 6e  <td>Test data un
2810: 61 76 61 69 6c 61 62 6c 65 2e 3c 2f 74 64 3e 0a  available.</td>.
2820: 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 33 2e  </tr>.<tr><td>3.
2830: 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e  &nbsp;</td>.<td>
2840: 4d 79 53 51 4c 20 76 65 72 73 69 6f 6e 20 33 2e  MySQL version 3.
2850: 32 33 2e 34 31 20 64 6f 65 73 20 6e 6f 74 20 73  23.41 does not s
2860: 75 70 70 6f 72 74 20 55 4e 49 4f 4e 2e 3c 2f 74  upport UNION.</t
2870: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  d>.</tr>.<tr><td
2880: 3e 34 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c  >4.&nbsp;</td>.<
2890: 74 64 3e 53 51 4c 20 41 6e 79 77 68 65 72 65 20  td>SQL Anywhere 
28a0: 61 6e 64 20 42 6f 72 6c 61 6e 64 20 49 6e 74 65  and Borland Inte
28b0: 72 62 61 73 65 20 0a 64 6f 20 6e 6f 74 20 61 6c  rbase .do not al
28c0: 6c 6f 77 20 4e 55 4c 4c 73 20 69 6e 20 61 20 55  low NULLs in a U
28d0: 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 2e 3c 2f 74  NIQUE column.</t
28e0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  d>.</tr>.<tr><td
28f0: 3e 35 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c  >5.&nbsp;</td>.<
2900: 74 64 3e 42 6f 72 6c 61 6e 64 20 49 6e 74 65 72  td>Borland Inter
2910: 62 61 73 65 20 64 6f 65 73 20 6e 6f 74 20 73 75  base does not su
2920: 70 70 6f 72 74 20 43 41 53 45 20 65 78 70 72 65  pport CASE expre
2930: 73 73 69 6f 6e 73 2e 3c 2f 74 64 3e 0a 3c 2f 74  ssions.</td>.</t
2940: 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c 62 72 20  r>.</table>.<br 
2950: 63 6c 65 61 72 3d 22 62 6f 74 68 22 3e 0a 0a 3c  clear="both">..<
2960: 70 3e 26 6e 62 73 70 3b 3c 2f 70 3e 0a 3c 70 3e  p>&nbsp;</p>.<p>
2970: 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73  .The following s
2980: 63 72 69 70 74 20 77 61 73 20 75 73 65 64 20 74  cript was used t
2990: 6f 20 67 61 74 68 65 72 20 69 6e 66 6f 72 6d 61  o gather informa
29a0: 74 69 6f 6e 20 66 6f 72 20 74 68 65 20 74 61 62  tion for the tab
29b0: 6c 65 0a 61 62 6f 76 65 2e 0a 3c 2f 70 3e 0a 0a  le.above..</p>..
29c0: 3c 70 72 65 3e 0a 2d 2d 20 49 20 68 61 76 65 20  <pre>.-- I have 
29d0: 61 62 6f 75 74 20 64 65 63 69 64 65 64 20 74 68  about decided th
29e0: 61 74 20 53 51 4c 27 73 20 74 72 65 61 74 6d 65  at SQL's treatme
29f0: 6e 74 20 6f 66 20 4e 55 4c 4c 73 20 69 73 20 63  nt of NULLs is c
2a00: 61 70 72 69 63 69 6f 75 73 20 61 6e 64 20 63 61  apricious and ca
2a10: 6e 6e 6f 74 20 62 65 0a 2d 2d 20 64 65 64 75 63  nnot be.-- deduc
2a20: 65 64 20 62 79 20 6c 6f 67 69 63 2e 20 20 49 74  ed by logic.  It
2a30: 20 6d 75 73 74 20 62 65 20 64 69 73 63 6f 76 65   must be discove
2a40: 72 65 64 20 62 79 20 65 78 70 65 72 69 6d 65 6e  red by experimen
2a50: 74 2e 20 20 54 6f 20 74 68 61 74 20 65 6e 64 2c  t.  To that end,
2a60: 20 49 20 68 61 76 65 20 0a 2d 2d 20 70 72 65 70   I have .-- prep
2a70: 61 72 65 64 20 74 68 65 20 66 6f 6c 6c 6f 77 69  ared the followi
2a80: 6e 67 20 73 63 72 69 70 74 20 74 6f 20 74 65 73  ng script to tes
2a90: 74 20 68 6f 77 20 76 61 72 69 6f 75 73 20 53 51  t how various SQ
2aa0: 4c 20 64 61 74 61 62 61 73 65 73 20 64 65 61 6c  L databases deal
2ab0: 20 77 69 74 68 20 4e 55 4c 4c 2e 0a 2d 2d 20 4d   with NULL..-- M
2ac0: 79 20 61 69 6d 20 69 73 20 74 6f 20 75 73 65 20  y aim is to use 
2ad0: 74 68 65 20 69 6e 66 6f 72 6d 61 74 69 6f 6e 20  the information 
2ae0: 67 61 74 68 65 72 20 66 72 6f 6d 20 74 68 69 73  gather from this
2af0: 20 73 63 72 69 70 74 20 74 6f 20 6d 61 6b 65 20   script to make 
2b00: 53 51 4c 69 74 65 20 61 73 20 6d 75 63 68 0a 2d  SQLite as much.-
2b10: 2d 20 6c 69 6b 65 20 6f 74 68 65 72 20 64 61 74  - like other dat
2b20: 61 62 61 73 65 73 20 61 73 20 70 6f 73 73 69 62  abases as possib
2b30: 6c 65 2e 0a 2d 2d 0a 2d 2d 20 49 66 20 79 6f 75  le..--.-- If you
2b40: 20 63 6f 75 6c 64 20 70 6c 65 61 73 65 20 72 75   could please ru
2b50: 6e 20 74 68 69 73 20 73 63 72 69 70 74 20 69 6e  n this script in
2b60: 20 79 6f 75 72 20 64 61 74 61 62 61 73 65 20 65   your database e
2b70: 6e 67 69 6e 65 20 61 6e 64 20 6d 61 69 6c 20 74  ngine and mail t
2b80: 68 65 20 72 65 73 75 6c 74 73 0a 2d 2d 20 74 6f  he results.-- to
2b90: 20 6d 65 20 61 74 20 64 72 68 40 68 77 61 63 69   me at drh@hwaci
2ba0: 2e 63 6f 6d 2c 20 74 68 61 74 20 77 69 6c 6c 20  .com, that will 
2bb0: 62 65 20 61 20 62 69 67 20 68 65 6c 70 2e 20 20  be a big help.  
2bc0: 50 6c 65 61 73 65 20 62 65 20 73 75 72 65 20 74  Please be sure t
2bd0: 6f 20 69 64 65 6e 74 69 66 79 20 74 68 65 0a 2d  o identify the.-
2be0: 2d 20 64 61 74 61 62 61 73 65 20 65 6e 67 69 6e  - database engin
2bf0: 65 20 79 6f 75 20 75 73 65 20 66 6f 72 20 74 68  e you use for th
2c00: 69 73 20 74 65 73 74 2e 20 20 54 68 61 6e 6b 73  is test.  Thanks
2c10: 2e 0a 2d 2d 0a 2d 2d 20 49 66 20 79 6f 75 20 68  ..--.-- If you h
2c20: 61 76 65 20 74 6f 20 63 68 61 6e 67 65 20 61 6e  ave to change an
2c30: 79 74 68 69 6e 67 20 74 6f 20 67 65 74 20 74 68  ything to get th
2c40: 69 73 20 73 63 72 69 70 74 20 74 6f 20 72 75 6e  is script to run
2c50: 20 77 69 74 68 20 79 6f 75 72 20 64 61 74 61 62   with your datab
2c60: 61 73 65 0a 2d 2d 20 65 6e 67 69 6e 65 2c 20 70  ase.-- engine, p
2c70: 6c 65 61 73 65 20 73 65 6e 64 20 79 6f 75 72 20  lease send your 
2c80: 72 65 76 69 73 65 64 20 73 63 72 69 70 74 20 74  revised script t
2c90: 6f 67 65 74 68 65 72 20 77 69 74 68 20 79 6f 75  ogether with you
2ca0: 72 20 72 65 73 75 6c 74 73 2e 0a 2d 2d 0a 0a 2d  r results..--..-
2cb0: 2d 20 43 72 65 61 74 65 20 61 20 74 65 73 74 20  - Create a test 
2cc0: 74 61 62 6c 65 20 77 69 74 68 20 64 61 74 61 0a  table with data.
2cd0: 63 72 65 61 74 65 20 74 61 62 6c 65 20 74 31 28  create table t1(
2ce0: 61 20 69 6e 74 2c 20 62 20 69 6e 74 2c 20 63 20  a int, b int, c 
2cf0: 69 6e 74 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74  int);.insert int
2d00: 6f 20 74 31 20 76 61 6c 75 65 73 28 31 2c 30 2c  o t1 values(1,0,
2d10: 30 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20  0);.insert into 
2d20: 74 31 20 76 61 6c 75 65 73 28 32 2c 30 2c 31 29  t1 values(2,0,1)
2d30: 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31  ;.insert into t1
2d40: 20 76 61 6c 75 65 73 28 33 2c 31 2c 30 29 3b 0a   values(3,1,0);.
2d50: 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76  insert into t1 v
2d60: 61 6c 75 65 73 28 34 2c 31 2c 31 29 3b 0a 69 6e  alues(4,1,1);.in
2d70: 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61 6c  sert into t1 val
2d80: 75 65 73 28 35 2c 6e 75 6c 6c 2c 30 29 3b 0a 69  ues(5,null,0);.i
2d90: 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76 61  nsert into t1 va
2da0: 6c 75 65 73 28 36 2c 6e 75 6c 6c 2c 31 29 3b 0a  lues(6,null,1);.
2db0: 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20 76  insert into t1 v
2dc0: 61 6c 75 65 73 28 37 2c 6e 75 6c 6c 2c 6e 75 6c  alues(7,null,nul
2dd0: 6c 29 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20 74 6f  l);..-- Check to
2de0: 20 73 65 65 20 77 68 61 74 20 43 41 53 45 20 64   see what CASE d
2df0: 6f 65 73 20 77 69 74 68 20 4e 55 4c 4c 73 20 69  oes with NULLs i
2e00: 6e 20 69 74 73 20 74 65 73 74 20 65 78 70 72 65  n its test expre
2e10: 73 73 69 6f 6e 73 0a 73 65 6c 65 63 74 20 61 2c  ssions.select a,
2e20: 20 63 61 73 65 20 77 68 65 6e 20 62 3c 3e 30 20   case when b<>0 
2e30: 74 68 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e  then 1 else 0 en
2e40: 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63  d from t1;.selec
2e50: 74 20 61 2b 31 30 2c 20 63 61 73 65 20 77 68 65  t a+10, case whe
2e60: 6e 20 6e 6f 74 20 62 3c 3e 30 20 74 68 65 6e 20  n not b<>0 then 
2e70: 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f  1 else 0 end fro
2e80: 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 32  m t1;.select a+2
2e90: 30 2c 20 63 61 73 65 20 77 68 65 6e 20 62 3c 3e  0, case when b<>
2ea0: 30 20 61 6e 64 20 63 3c 3e 30 20 74 68 65 6e 20  0 and c<>0 then 
2eb0: 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f  1 else 0 end fro
2ec0: 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 33  m t1;.select a+3
2ed0: 30 2c 20 63 61 73 65 20 77 68 65 6e 20 6e 6f 74  0, case when not
2ee0: 20 28 62 3c 3e 30 20 61 6e 64 20 63 3c 3e 30 29   (b<>0 and c<>0)
2ef0: 20 74 68 65 6e 20 31 20 65 6c 73 65 20 30 20 65   then 1 else 0 e
2f00: 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65  nd from t1;.sele
2f10: 63 74 20 61 2b 34 30 2c 20 63 61 73 65 20 77 68  ct a+40, case wh
2f20: 65 6e 20 62 3c 3e 30 20 6f 72 20 63 3c 3e 30 20  en b<>0 or c<>0 
2f30: 74 68 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e  then 1 else 0 en
2f40: 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63  d from t1;.selec
2f50: 74 20 61 2b 35 30 2c 20 63 61 73 65 20 77 68 65  t a+50, case whe
2f60: 6e 20 6e 6f 74 20 28 62 3c 3e 30 20 6f 72 20 63  n not (b<>0 or c
2f70: 3c 3e 30 29 20 74 68 65 6e 20 31 20 65 6c 73 65  <>0) then 1 else
2f80: 20 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a   0 end from t1;.
2f90: 73 65 6c 65 63 74 20 61 2b 36 30 2c 20 63 61 73  select a+60, cas
2fa0: 65 20 62 20 77 68 65 6e 20 63 20 74 68 65 6e 20  e b when c then 
2fb0: 31 20 65 6c 73 65 20 30 20 65 6e 64 20 66 72 6f  1 else 0 end fro
2fc0: 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20 61 2b 37  m t1;.select a+7
2fd0: 30 2c 20 63 61 73 65 20 63 20 77 68 65 6e 20 62  0, case c when b
2fe0: 20 74 68 65 6e 20 31 20 65 6c 73 65 20 30 20 65   then 1 else 0 e
2ff0: 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20  nd from t1;..-- 
3000: 57 68 61 74 20 68 61 70 70 65 6e 73 20 77 68 65  What happens whe
3010: 6e 20 79 6f 75 20 6d 75 6c 74 69 70 6c 65 20 61  n you multiple a
3020: 20 4e 55 4c 4c 20 62 79 20 7a 65 72 6f 3f 0a 73   NULL by zero?.s
3030: 65 6c 65 63 74 20 61 2b 38 30 2c 20 62 2a 30 20  elect a+80, b*0 
3040: 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20  from t1;.select 
3050: 61 2b 39 30 2c 20 62 2a 63 20 66 72 6f 6d 20 74  a+90, b*c from t
3060: 31 3b 0a 0a 2d 2d 20 57 68 61 74 20 68 61 70 70  1;..-- What happ
3070: 65 6e 73 20 74 6f 20 4e 55 4c 4c 20 66 6f 72 20  ens to NULL for 
3080: 6f 74 68 65 72 20 6f 70 65 72 61 74 6f 72 73 3f  other operators?
3090: 0a 73 65 6c 65 63 74 20 61 2b 31 30 30 2c 20 62  .select a+100, b
30a0: 2b 63 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20  +c from t1;..-- 
30b0: 54 65 73 74 20 74 68 65 20 74 72 65 61 74 6d 65  Test the treatme
30c0: 6e 74 20 6f 66 20 61 67 67 72 65 67 61 74 65 20  nt of aggregate 
30d0: 6f 70 65 72 61 74 6f 72 73 0a 73 65 6c 65 63 74  operators.select
30e0: 20 63 6f 75 6e 74 28 2a 29 2c 20 63 6f 75 6e 74   count(*), count
30f0: 28 62 29 2c 20 73 75 6d 28 62 29 2c 20 61 76 67  (b), sum(b), avg
3100: 28 62 29 2c 20 6d 69 6e 28 62 29 2c 20 6d 61 78  (b), min(b), max
3110: 28 62 29 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d  (b) from t1;..--
3120: 20 43 68 65 63 6b 20 74 68 65 20 62 65 68 61 76   Check the behav
3130: 69 6f 72 20 6f 66 20 4e 55 4c 4c 73 20 69 6e 20  ior of NULLs in 
3140: 57 48 45 52 45 20 63 6c 61 75 73 65 73 0a 73 65  WHERE clauses.se
3150: 6c 65 63 74 20 61 2b 31 31 30 20 66 72 6f 6d 20  lect a+110 from 
3160: 74 31 20 77 68 65 72 65 20 62 3c 31 30 3b 0a 73  t1 where b<10;.s
3170: 65 6c 65 63 74 20 61 2b 31 32 30 20 66 72 6f 6d  elect a+120 from
3180: 20 74 31 20 77 68 65 72 65 20 6e 6f 74 20 62 3e   t1 where not b>
3190: 31 30 3b 0a 73 65 6c 65 63 74 20 61 2b 31 33 30  10;.select a+130
31a0: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 62   from t1 where b
31b0: 3c 31 30 20 4f 52 20 63 3d 31 3b 0a 73 65 6c 65  <10 OR c=1;.sele
31c0: 63 74 20 61 2b 31 34 30 20 66 72 6f 6d 20 74 31  ct a+140 from t1
31d0: 20 77 68 65 72 65 20 62 3c 31 30 20 41 4e 44 20   where b<10 AND 
31e0: 63 3d 31 3b 0a 73 65 6c 65 63 74 20 61 2b 31 35  c=1;.select a+15
31f0: 30 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20  0 from t1 where 
3200: 6e 6f 74 20 28 62 3c 31 30 20 41 4e 44 20 63 3d  not (b<10 AND c=
3210: 31 29 3b 0a 73 65 6c 65 63 74 20 61 2b 31 36 30  1);.select a+160
3220: 20 66 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e   from t1 where n
3230: 6f 74 20 28 63 3d 31 20 41 4e 44 20 62 3c 31 30  ot (c=1 AND b<10
3240: 29 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20 74 68 65  );..-- Check the
3250: 20 62 65 68 61 76 69 6f 72 20 6f 66 20 4e 55 4c   behavior of NUL
3260: 4c 73 20 69 6e 20 61 20 44 49 53 54 49 4e 43 54  Ls in a DISTINCT
3270: 20 71 75 65 72 79 0a 73 65 6c 65 63 74 20 64 69   query.select di
3280: 73 74 69 6e 63 74 20 62 20 66 72 6f 6d 20 74 31  stinct b from t1
3290: 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20 74 68 65 20  ;..-- Check the 
32a0: 62 65 68 61 76 69 6f 72 20 6f 66 20 4e 55 4c 4c  behavior of NULL
32b0: 73 20 69 6e 20 61 20 55 4e 49 4f 4e 20 71 75 65  s in a UNION que
32c0: 72 79 0a 73 65 6c 65 63 74 20 62 20 66 72 6f 6d  ry.select b from
32d0: 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c 65 63 74   t1 union select
32e0: 20 62 20 66 72 6f 6d 20 74 31 3b 0a 0a 2d 2d 20   b from t1;..-- 
32f0: 43 72 65 61 74 65 20 61 20 6e 65 77 20 74 61 62  Create a new tab
3300: 6c 65 20 77 69 74 68 20 61 20 75 6e 69 71 75 65  le with a unique
3310: 20 63 6f 6c 75 6d 6e 2e 20 20 43 68 65 63 6b 20   column.  Check 
3320: 74 6f 20 73 65 65 20 69 66 20 4e 55 4c 4c 73 20  to see if NULLs 
3330: 61 72 65 20 63 6f 6e 73 69 64 65 72 65 64 0a 2d  are considered.-
3340: 2d 20 74 6f 20 62 65 20 64 69 73 74 69 6e 63 74  - to be distinct
3350: 2e 0a 63 72 65 61 74 65 20 74 61 62 6c 65 20 74  ..create table t
3360: 32 28 61 20 69 6e 74 2c 20 62 20 69 6e 74 20 75  2(a int, b int u
3370: 6e 69 71 75 65 29 3b 0a 69 6e 73 65 72 74 20 69  nique);.insert i
3380: 6e 74 6f 20 74 32 20 76 61 6c 75 65 73 28 31 2c  nto t2 values(1,
3390: 31 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20  1);.insert into 
33a0: 74 32 20 76 61 6c 75 65 73 28 32 2c 6e 75 6c 6c  t2 values(2,null
33b0: 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74  );.insert into t
33c0: 32 20 76 61 6c 75 65 73 28 33 2c 6e 75 6c 6c 29  2 values(3,null)
33d0: 3b 0a 73 65 6c 65 63 74 20 2a 20 66 72 6f 6d 20  ;.select * from 
33e0: 74 32 3b 0a 0a 64 72 6f 70 20 74 61 62 6c 65 20  t2;..drop table 
33f0: 74 31 3b 0a 64 72 6f 70 20 74 61 62 6c 65 20 74  t1;.drop table t
3400: 32 3b 0a 3c 2f 70 72 65 3e 0a 7d 0a 0a 66 6f 6f  2;.</pre>.}..foo
3410: 74 65 72 20 24 72 63 73 69 64 0a                 ter $rcsid.