/ Hex Artifact Content
Login

Artifact 38117d24afb81efd079b59723b985a6d654cc2e8:


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 35 20 32 30 30 33  s.tcl,v 1.5 2003
0060: 2f 31 31 2f 30 38 20 31 32 3a 30 37 3a 30 31 20  /11/08 12:07:01 
0070: 64 72 68 20 45 78 70 20 24 7d 0a 0a 70 75 74 73  drh Exp $}..puts
0080: 20 7b 3c 68 74 6d 6c 3e 0a 3c 68 65 61 64 3e 0a   {<html>.<head>.
0090: 3c 74 69 74 6c 65 3e 4e 55 4c 4c 20 48 61 6e 64  <title>NULL Hand
00a0: 6c 69 6e 67 20 49 6e 20 53 51 4c 69 74 65 20 56  ling In SQLite V
00b0: 65 72 73 75 73 20 4f 74 68 65 72 20 44 61 74 61  ersus Other Data
00c0: 62 61 73 65 20 45 6e 67 69 6e 65 73 3c 2f 74 69  base Engines</ti
00d0: 74 6c 65 3e 0a 3c 2f 68 65 61 64 3e 0a 3c 62 6f  tle>.</head>.<bo
00e0: 64 79 20 62 67 63 6f 6c 6f 72 3d 22 77 68 69 74  dy bgcolor="whit
00f0: 65 22 3e 0a 3c 68 31 20 61 6c 69 67 6e 3d 22 63  e">.<h1 align="c
0100: 65 6e 74 65 72 22 3e 0a 4e 55 4c 4c 20 48 61 6e  enter">.NULL Han
0110: 64 6c 69 6e 67 20 69 6e 20 53 51 4c 69 74 65 20  dling in SQLite 
0120: 56 65 72 73 75 73 20 4f 74 68 65 72 20 44 61 74  Versus Other Dat
0130: 61 62 61 73 65 20 45 6e 67 69 6e 65 73 0a 3c 2f  abase Engines.</
0140: 68 31 3e 0a 7d 0a 70 75 74 73 20 22 3c 70 20 61  h1>.}.puts "<p a
0150: 6c 69 67 6e 3d 5c 22 63 65 6e 74 65 72 5c 22 3e  lign=\"center\">
0160: 0a 28 54 68 69 73 20 70 61 67 65 20 77 61 73 20  .(This page was 
0170: 6c 61 73 74 20 6d 6f 64 69 66 69 65 64 20 6f 6e  last modified on
0180: 20 5b 6c 72 61 6e 67 65 20 24 72 63 73 69 64 20   [lrange $rcsid 
0190: 33 20 34 5d 20 55 54 43 29 0a 3c 2f 70 3e 22 0a  3 4] UTC).</p>".
01a0: 0a 70 75 74 73 20 7b 0a 3c 70 3e 0a 54 68 65 20  .puts {.<p>.The 
01b0: 67 6f 61 6c 20 69 73 0a 74 6f 20 6d 61 6b 65 20  goal is.to make 
01c0: 53 51 4c 69 74 65 20 68 61 6e 64 6c 65 20 4e 55  SQLite handle NU
01d0: 4c 4c 73 20 69 6e 20 61 20 73 74 61 6e 64 61 72  LLs in a standar
01e0: 64 73 2d 63 6f 6d 70 6c 69 61 6e 74 20 77 61 79  ds-compliant way
01f0: 2e 0a 42 75 74 20 74 68 65 20 64 65 73 63 72 69  ..But the descri
0200: 70 74 69 6f 6e 73 20 69 6e 20 74 68 65 20 53 51  ptions in the SQ
0210: 4c 20 73 74 61 6e 64 61 72 64 73 20 6f 6e 20 68  L standards on h
0220: 6f 77 20 74 6f 20 68 61 6e 64 6c 65 0a 4e 55 4c  ow to handle.NUL
0230: 4c 73 20 73 65 65 6d 20 61 6d 62 69 67 75 6f 75  Ls seem ambiguou
0240: 73 2e 20 0a 49 74 20 69 73 20 6e 6f 74 20 63 6c  s. .It is not cl
0250: 65 61 72 20 66 72 6f 6d 20 74 68 65 20 73 74 61  ear from the sta
0260: 6e 64 61 72 64 73 20 64 6f 63 75 6d 65 6e 74 73  ndards documents
0270: 20 65 78 61 63 74 6c 79 20 68 6f 77 20 4e 55 4c   exactly how NUL
0280: 4c 73 20 73 68 6f 75 6c 64 0a 62 65 20 68 61 6e  Ls should.be han
0290: 64 6c 65 64 20 69 6e 20 61 6c 6c 20 63 69 72 63  dled in all circ
02a0: 75 6d 73 74 61 6e 63 65 73 2e 0a 3c 2f 70 3e 0a  umstances..</p>.
02b0: 0a 3c 70 3e 0a 53 6f 20 69 6e 73 74 65 61 64 20  .<p>.So instead 
02c0: 6f 66 20 67 6f 69 6e 67 20 62 79 20 74 68 65 20  of going by the 
02d0: 73 74 61 6e 64 61 72 64 73 20 64 6f 63 75 6d 65  standards docume
02e0: 6e 74 73 2c 20 76 61 72 69 6f 75 73 20 70 6f 70  nts, various pop
02f0: 75 6c 61 72 0a 53 51 4c 20 65 6e 67 69 6e 65 73  ular.SQL engines
0300: 20 77 65 72 65 20 74 65 73 74 65 64 20 74 6f 20   were tested to 
0310: 73 65 65 20 68 6f 77 20 74 68 65 79 20 68 61 6e  see how they han
0320: 64 6c 65 20 4e 55 4c 4c 73 2e 20 20 54 68 65 20  dle NULLs.  The 
0330: 69 64 65 61 0a 77 61 73 20 74 6f 20 6d 61 6b 65  idea.was to make
0340: 20 53 51 4c 69 74 65 20 77 6f 72 6b 20 6c 69 6b   SQLite work lik
0350: 65 20 61 6c 6c 20 74 68 65 20 6f 74 68 65 72 20  e all the other 
0360: 65 6e 67 69 6e 65 73 2e 0a 41 20 53 51 4c 20 74  engines..A SQL t
0370: 65 73 74 20 73 63 72 69 70 74 20 77 61 73 20 64  est script was d
0380: 65 76 65 6c 6f 70 65 64 20 61 6e 64 20 72 75 6e  eveloped and run
0390: 20 62 79 20 76 6f 6c 75 6e 74 65 65 72 73 20 6f   by volunteers o
03a0: 6e 20 76 61 72 69 6f 75 73 0a 53 51 4c 20 52 44  n various.SQL RD
03b0: 42 4d 53 65 73 20 61 6e 64 20 74 68 65 20 72 65  BMSes and the re
03c0: 73 75 6c 74 73 20 6f 66 20 74 68 6f 73 65 20 74  sults of those t
03d0: 65 73 74 73 20 77 65 72 65 20 75 73 65 64 20 74  ests were used t
03e0: 6f 20 64 65 64 75 63 65 0a 68 6f 77 20 65 61 63  o deduce.how eac
03f0: 68 20 65 6e 67 69 6e 65 20 70 72 6f 63 65 73 73  h engine process
0400: 65 64 20 4e 55 4c 4c 20 76 61 6c 75 65 73 2e 0a  ed NULL values..
0410: 54 68 65 20 6f 72 69 67 69 6e 61 6c 20 74 65 73  The original tes
0420: 74 73 20 77 65 72 65 20 72 75 6e 20 69 6e 20 4d  ts were run in M
0430: 61 79 20 6f 66 20 32 30 30 32 2e 0a 41 20 63 6f  ay of 2002..A co
0440: 70 79 20 6f 66 20 74 68 65 20 74 65 73 74 20 73  py of the test s
0450: 63 72 69 70 74 20 69 73 20 66 6f 75 6e 64 20 61  cript is found a
0460: 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 69  t the end of thi
0470: 73 20 64 6f 63 75 6d 65 6e 74 2e 0a 3c 2f 70 3e  s document..</p>
0480: 0a 0a 3c 70 3e 0a 53 51 4c 69 74 65 20 77 61 73  ..<p>.SQLite was
0490: 20 6f 72 69 67 69 6e 61 6c 6c 79 20 63 6f 64 65   originally code
04a0: 64 20 69 6e 20 73 75 63 68 20 61 20 77 61 79 20  d in such a way 
04b0: 74 68 61 74 20 74 68 65 20 61 6e 73 77 65 72 20  that the answer 
04c0: 74 6f 0a 61 6c 6c 20 71 75 65 73 74 69 6f 6e 73  to.all questions
04d0: 20 69 6e 20 74 68 65 20 63 68 61 72 74 20 62 65   in the chart be
04e0: 6c 6f 77 20 77 6f 75 6c 64 20 62 65 20 22 59 65  low would be "Ye
04f0: 73 22 2e 20 20 42 75 74 20 74 68 65 0a 65 78 70  s".  But the.exp
0500: 72 69 6d 65 6e 74 73 20 72 75 6e 20 6f 6e 20 6f  riments run on o
0510: 74 68 65 72 20 53 51 4c 20 65 6e 67 69 6e 65 73  ther SQL engines
0520: 20 73 68 6f 77 65 64 20 74 68 61 74 20 6e 6f 6e   showed that non
0530: 65 20 6f 66 20 74 68 65 6d 0a 77 6f 72 6b 65 64  e of them.worked
0540: 20 74 68 69 73 20 77 61 79 2e 20 20 53 6f 20 53   this way.  So S
0550: 51 4c 69 74 65 20 77 61 73 20 6d 6f 64 69 66 69  QLite was modifi
0560: 65 64 20 74 6f 20 77 6f 72 6b 20 74 68 65 20 73  ed to work the s
0570: 61 6d 65 20 61 73 0a 4f 72 61 63 6c 65 2c 20 50  ame as.Oracle, P
0580: 6f 73 74 67 72 65 53 51 4c 2c 20 61 6e 64 20 44  ostgreSQL, and D
0590: 42 32 2e 20 20 54 68 69 73 20 69 6e 76 6f 6c 76  B2.  This involv
05a0: 65 64 20 6d 61 6b 69 6e 67 20 4e 55 4c 4c 73 0a  ed making NULLs.
05b0: 69 6e 64 69 73 74 69 6e 63 74 20 66 6f 72 20 74  indistinct for t
05c0: 68 65 20 70 75 72 70 6f 73 65 73 20 6f 66 20 74  he purposes of t
05d0: 68 65 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e  he SELECT DISTIN
05e0: 43 54 20 73 74 61 74 65 6d 65 6e 74 20 61 6e 64  CT statement and
05f0: 0a 66 6f 72 20 74 68 65 20 55 4e 49 4f 4e 20 6f  .for the UNION o
0600: 70 65 72 61 74 6f 72 20 69 6e 20 61 20 53 45 4c  perator in a SEL
0610: 45 43 54 2e 20 20 4e 55 4c 4c 73 20 61 72 65 20  ECT.  NULLs are 
0620: 73 74 69 6c 6c 20 64 69 73 74 69 6e 63 74 0a 69  still distinct.i
0630: 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d  n a UNIQUE colum
0640: 6e 2e 20 20 54 68 69 73 20 73 65 65 6d 73 20 73  n.  This seems s
0650: 6f 6d 65 77 68 61 74 20 61 72 62 69 74 72 61 72  omewhat arbitrar
0660: 79 2c 20 62 75 74 20 74 68 65 20 64 65 73 69 72  y, but the desir
0670: 65 0a 74 6f 20 62 65 20 63 6f 6d 70 61 74 69 62  e.to be compatib
0680: 6c 65 20 77 69 74 68 20 6f 74 68 65 72 20 65 6e  le with other en
0690: 67 69 6e 65 73 20 6f 75 74 77 65 69 67 68 74 65  gines outweighte
06a0: 64 20 74 68 61 74 20 6f 62 6a 65 63 74 69 6f 6e  d that objection
06b0: 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 49 74 20 69  ..</p>..<p>.It i
06c0: 73 20 70 6f 73 73 69 62 6c 65 20 74 6f 20 6d 61  s possible to ma
06d0: 6b 65 20 53 51 4c 69 74 65 20 74 72 65 61 74 20  ke SQLite treat 
06e0: 4e 55 4c 4c 73 20 61 73 20 64 69 73 74 69 6e 63  NULLs as distinc
06f0: 74 20 66 6f 72 20 74 68 65 0a 70 75 72 70 6f 73  t for the.purpos
0700: 65 73 20 6f 66 20 74 68 65 20 53 45 4c 45 43 54  es of the SELECT
0710: 20 44 49 53 54 49 4e 43 54 20 61 6e 64 20 55 4e   DISTINCT and UN
0720: 49 4f 4e 2e 20 20 54 6f 20 64 6f 20 73 6f 2c 20  ION.  To do so, 
0730: 6f 6e 65 20 73 68 6f 75 6c 64 0a 63 68 61 6e 67  one should.chang
0740: 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  e the value of t
0750: 68 65 20 4e 55 4c 4c 5f 41 4c 57 41 59 53 5f 44  he NULL_ALWAYS_D
0760: 49 53 54 49 4e 43 54 20 23 64 65 66 69 6e 65 20  ISTINCT #define 
0770: 69 6e 20 74 68 65 0a 3c 74 74 3e 73 71 6c 69 74  in the.<tt>sqlit
0780: 65 49 6e 74 2e 68 3c 2f 74 74 3e 20 73 6f 75 72  eInt.h</tt> sour
0790: 63 65 20 66 69 6c 65 20 61 6e 64 20 72 65 63 6f  ce file and reco
07a0: 6d 70 69 6c 65 2e 0a 3c 2f 70 3e 0a 0a 3c 62 6c  mpile..</p>..<bl
07b0: 6f 63 6b 71 75 6f 74 65 3e 0a 3c 70 3e 0a 3c 69  ockquote>.<p>.<i
07c0: 3e 55 70 64 61 74 65 20 32 30 30 33 2d 30 37 2d  >Update 2003-07-
07d0: 31 33 3a 3c 2f 69 3e 0a 53 69 6e 63 65 20 74 68  13:</i>.Since th
07e0: 69 73 20 64 6f 63 75 6d 65 6e 74 20 77 61 73 20  is document was 
07f0: 6f 72 69 67 69 6e 61 6c 6c 79 20 77 72 69 74 74  originally writt
0800: 65 6e 20 73 6f 6d 65 20 6f 66 20 74 68 65 20 64  en some of the d
0810: 61 74 61 62 61 73 65 20 65 6e 67 69 6e 65 73 0a  atabase engines.
0820: 74 65 73 74 65 64 20 68 61 76 65 20 62 65 65 6e  tested have been
0830: 20 75 70 64 61 74 65 64 20 61 6e 64 20 75 73 65   updated and use
0840: 72 73 20 68 61 76 65 20 62 65 65 6e 20 6b 69 6e  rs have been kin
0850: 64 20 65 6e 6f 75 67 68 20 74 6f 20 73 65 6e 64  d enough to send
0860: 20 69 6e 0a 63 6f 72 72 65 63 74 69 6f 6e 73 20   in.corrections 
0870: 74 6f 20 74 68 65 20 63 68 61 72 74 20 62 65 6c  to the chart bel
0880: 6f 77 2e 20 20 54 68 65 20 6f 72 69 67 69 6e 61  ow.  The origina
0890: 6c 20 64 61 74 61 20 73 68 6f 77 65 64 20 61 20  l data showed a 
08a0: 77 69 64 65 20 76 61 72 69 65 74 79 0a 6f 66 20  wide variety.of 
08b0: 62 65 68 61 76 69 6f 72 73 2c 20 62 75 74 20 6f  behaviors, but o
08c0: 76 65 72 20 74 69 6d 65 20 74 68 65 20 72 61 6e  ver time the ran
08d0: 67 65 20 6f 66 20 62 65 68 61 76 69 6f 72 73 20  ge of behaviors 
08e0: 68 61 73 20 63 6f 6e 76 65 72 67 65 64 20 74 6f  has converged to
08f0: 77 61 72 64 0a 74 68 65 20 50 6f 73 74 67 72 65  ward.the Postgre
0900: 53 51 4c 2f 4f 72 61 63 6c 65 20 6d 6f 64 65 6c  SQL/Oracle model
0910: 2e 20 20 54 68 65 20 6f 6e 6c 79 20 73 69 67 6e  .  The only sign
0920: 69 66 69 63 61 6e 74 20 64 69 66 66 65 72 65 6e  ificant differen
0930: 63 65 20 0a 69 73 20 74 68 61 74 20 49 6e 66 6f  ce .is that Info
0940: 72 6d 69 78 20 61 6e 64 20 4d 53 2d 53 51 4c 20  rmix and MS-SQL 
0950: 62 6f 74 68 20 74 68 72 65 61 74 20 4e 55 4c 4c  both threat NULL
0960: 73 20 61 73 0a 69 6e 64 69 73 74 69 6e 63 74 20  s as.indistinct 
0970: 69 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75  in a UNIQUE colu
0980: 6d 6e 2e 0a 3c 2f 70 3e 0a 0a 3c 70 3e 0a 54 68  mn..</p>..<p>.Th
0990: 65 20 66 61 63 74 20 74 68 61 74 20 4e 55 4c 4c  e fact that NULL
09a0: 73 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 66  s are distinct f
09b0: 6f 72 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e  or UNIQUE column
09c0: 73 20 62 75 74 20 61 72 65 20 69 6e 64 69 73 74  s but are indist
09d0: 69 6e 63 74 20 66 6f 72 0a 53 45 4c 45 43 54 20  inct for.SELECT 
09e0: 44 49 53 54 49 4e 43 54 20 61 6e 64 20 55 4e 49  DISTINCT and UNI
09f0: 4f 4e 20 63 6f 6e 74 69 6e 75 65 73 20 74 6f 20  ON continues to 
0a00: 62 65 20 70 75 7a 7a 6c 69 6e 67 2e 20 20 49 74  be puzzling.  It
0a10: 20 73 65 65 6d 73 20 74 68 61 74 20 4e 55 4c 4c   seems that NULL
0a20: 73 0a 73 68 6f 75 6c 64 20 62 65 20 65 69 74 68  s.should be eith
0a30: 65 72 20 64 69 73 74 69 6e 63 74 20 65 76 65 72  er distinct ever
0a40: 79 77 68 65 72 65 20 6f 72 20 6e 6f 77 68 65 72  ywhere or nowher
0a50: 65 2e 20 20 41 6e 64 20 74 68 65 20 53 51 4c 20  e.  And the SQL 
0a60: 73 74 61 6e 64 61 72 64 73 0a 64 6f 63 75 6d 65  standards.docume
0a70: 6e 74 73 20 73 75 67 67 65 73 74 20 74 68 61 74  nts suggest that
0a80: 20 4e 55 4c 4c 73 20 73 68 6f 75 6c 64 20 62 65   NULLs should be
0a90: 20 64 69 73 74 69 6e 63 74 20 65 76 65 72 79 77   distinct everyw
0aa0: 68 65 72 65 2e 20 20 59 65 74 20 61 73 20 6f 66  here.  Yet as of
0ab0: 0a 74 68 69 73 20 77 72 69 74 69 6e 67 2c 20 6e  .this writing, n
0ac0: 6f 20 53 51 4c 20 65 6e 67 69 6e 65 20 74 65 73  o SQL engine tes
0ad0: 74 65 64 20 74 72 65 61 74 73 20 4e 55 4c 4c 73  ted treats NULLs
0ae0: 20 61 73 20 64 69 73 74 69 6e 63 74 20 69 6e 20   as distinct in 
0af0: 61 20 53 45 4c 45 43 54 0a 44 49 53 54 49 4e 43  a SELECT.DISTINC
0b00: 54 20 73 74 61 74 65 6d 65 6e 74 20 6f 72 20 69  T statement or i
0b10: 6e 20 61 20 55 4e 49 4f 4e 2e 0a 3c 2f 70 3e 0a  n a UNION..</p>.
0b20: 3c 2f 62 6c 6f 63 6b 71 75 6f 74 65 3e 0a 0a 0a  </blockquote>...
0b30: 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  <p>.The followin
0b40: 67 20 74 61 62 6c 65 20 73 68 6f 77 73 20 74 68  g table shows th
0b50: 65 20 72 65 73 75 6c 74 73 20 6f 66 20 74 68 65  e results of the
0b60: 20 4e 55 4c 4c 20 68 61 6e 64 6c 69 6e 67 20 65   NULL handling e
0b70: 78 70 65 72 69 6d 65 6e 74 73 2e 0a 3c 2f 70 3e  xperiments..</p>
0b80: 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72 3d  ..<table border=
0b90: 31 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 33 20  1 cellpadding=3 
0ba0: 77 69 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c 74  width="100%">.<t
0bb0: 72 3e 3c 74 68 3e 26 6e 62 73 70 26 6e 62 73 70  r><th>&nbsp&nbsp
0bc0: 3b 3c 2f 74 68 3e 0a 3c 74 68 3e 53 51 4c 69 74  ;</th>.<th>SQLit
0bd0: 65 3c 2f 74 68 3e 0a 3c 74 68 3e 50 6f 73 74 67  e</th>.<th>Postg
0be0: 72 65 53 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f  reSQL</th>.<th>O
0bf0: 72 61 63 6c 65 3c 2f 74 68 3e 0a 3c 74 68 3e 49  racle</th>.<th>I
0c00: 6e 66 6f 72 6d 69 78 3c 2f 74 68 3e 0a 3c 74 68  nformix</th>.<th
0c10: 3e 44 42 32 3c 2f 74 68 3e 0a 3c 74 68 3e 4d 53  >DB2</th>.<th>MS
0c20: 2d 53 51 4c 3c 2f 74 68 3e 0a 3c 74 68 3e 4f 43  -SQL</th>.<th>OC
0c30: 45 4c 4f 54 3c 2f 74 68 3e 0a 3c 2f 74 72 3e 0a  ELOT</th>.</tr>.
0c40: 0a 3c 74 72 3e 3c 74 64 3e 41 64 64 69 6e 67 20  .<tr><td>Adding 
0c50: 61 6e 79 74 68 69 6e 67 20 74 6f 20 6e 75 6c 6c  anything to null
0c60: 20 67 69 76 65 73 20 6e 75 6c 6c 3c 2f 74 64 3e   gives null</td>
0c70: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
0c80: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
0c90: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
0ca0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
0cb0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
0cc0: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
0cd0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
0ce0: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
0cf0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
0d00: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
0d10: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
0d20: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
0d30: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
0d40: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
0d50: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
0d60: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
0d70: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
0d80: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
0d90: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
0da0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</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 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  d>.</tr>.<tr><td
0e30: 3e 4d 75 6c 74 69 70 6c 79 69 6e 67 20 6e 75 6c  >Multiplying nul
0e40: 6c 20 62 79 20 7a 65 72 6f 20 67 69 76 65 73 20  l by zero gives 
0e50: 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  null</td>.<td va
0e60: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
0e70: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
0e80: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
0e90: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
0ea0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
0eb0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
0ec0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
0ed0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
0ee0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
0ef0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
0f00: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
0f10: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
0f20: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
0f30: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
0f40: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
0f50: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
0f60: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
0f70: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
0f80: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
0f90: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
0fa0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
0fb0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
0fc0: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74  7a9">Yes</td>.<t
0fd0: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
0fe0: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
0ff0: 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61   bgcolor="#a9c7a
1000: 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72  9">Yes</td>.</tr
1010: 3e 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20  >.<tr><td>nulls 
1020: 61 72 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20  are distinct in 
1030: 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 3c  a UNIQUE column<
1040: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1050: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1060: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1070: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1080: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1090: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
10a0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
10b0: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
10c0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
10d0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
10e0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
10f0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1100: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1110: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1120: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
1130: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20  a9">No</td>.<td 
1140: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
1150: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
1160: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
1170: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
1180: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1190: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
11a0: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
11b0: 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  o</td>.<td valig
11c0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
11d0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
11e0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
11f0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  /td>.</tr>.<tr><
1200: 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64 69 73  td>nulls are dis
1210: 74 69 6e 63 74 20 69 6e 20 53 45 4c 45 43 54 20  tinct in SELECT 
1220: 44 49 53 54 49 4e 43 54 3c 2f 74 64 3e 0a 3c 74  DISTINCT</td>.<t
1230: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1240: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1250: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
1260: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
1270: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1280: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1290: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
12a0: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
12b0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
12c0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
12d0: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
12e0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
12f0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1300: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1310: 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64  "#c7a9a9">No</td
1320: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1330: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1340: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63  ter" bgcolor="#c
1350: 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c  7a9a9">No</td>.<
1360: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1370: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1380: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39  " bgcolor="#c7a9
1390: 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20  a9">No</td>.<td 
13a0: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
13b0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
13c0: 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22  gcolor="#c7a9a9"
13d0: 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  >No</td>.</tr>.<
13e0: 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65  tr><td>nulls are
13f0: 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20 55   distinct in a U
1400: 4e 49 4f 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  NION</td>.<td va
1410: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
1420: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
1430: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
1440: 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  o</td>.<td valig
1450: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1460: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1470: 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f  r="#c7a9a9">No</
1480: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1490: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
14a0: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
14b0: 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e  #c7a9a9">No</td>
14c0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
14d0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
14e0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
14f0: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
1500: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
1510: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
1520: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
1530: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
1540: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1550: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1560: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
1570: 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  No</td>.<td vali
1580: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1590: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
15a0: 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e 6f 3c  or="#c7a9a9">No<
15b0: 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c  /td>.</tr>.<tr><
15c0: 74 64 3e 22 43 41 53 45 20 57 48 45 4e 20 6e 75  td>"CASE WHEN nu
15d0: 6c 6c 20 54 48 45 4e 20 31 20 45 4c 53 45 20 30  ll THEN 1 ELSE 0
15e0: 20 45 4e 44 22 20 69 73 20 30 3f 3c 2f 74 64 3e   END" is 0?</td>
15f0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1600: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1610: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
1620: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1630: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1640: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1650: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
1660: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
1670: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1680: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1690: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
16a0: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
16b0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
16c0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
16d0: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
16e0: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
16f0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1700: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1710: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
1720: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
1730: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1740: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1750: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
1760: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1770: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1780: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1790: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
17a0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  d>.</tr>.<tr><td
17b0: 3e 22 6e 75 6c 6c 20 4f 52 20 74 72 75 65 22 20  >"null OR true" 
17c0: 69 73 20 74 72 75 65 3c 2f 74 64 3e 0a 3c 74 64  is true</td>.<td
17d0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
17e0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
17f0: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
1800: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
1810: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1820: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1830: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
1840: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
1850: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1860: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1870: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
1880: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
1890: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
18a0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
18b0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
18c0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
18d0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
18e0: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
18f0: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1900: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1910: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
1920: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
1930: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
1940: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
1950: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
1960: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
1970: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
1980: 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 22 6e 6f  /tr>.<tr><td>"no
1990: 74 20 28 6e 75 6c 6c 20 41 4e 44 20 66 61 6c 73  t (null AND fals
19a0: 65 29 22 20 69 73 20 74 72 75 65 3c 2f 74 64 3e  e)" is true</td>
19b0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
19c0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
19d0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
19e0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
19f0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
1a00: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
1a10: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
1a20: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
1a30: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
1a40: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
1a50: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
1a60: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
1a70: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1a80: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1a90: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
1aa0: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
1ab0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1ac0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1ad0: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
1ae0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
1af0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1b00: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1b10: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
1b20: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1b30: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1b40: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1b50: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1b60: 64 3e 0a 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65  d>.</tr>.</table
1b70: 3e 0a 0a 3c 74 61 62 6c 65 20 62 6f 72 64 65 72  >..<table border
1b80: 3d 31 20 63 65 6c 6c 70 61 64 64 69 6e 67 3d 33  =1 cellpadding=3
1b90: 20 77 69 64 74 68 3d 22 31 30 30 25 22 3e 0a 3c   width="100%">.<
1ba0: 74 72 3e 3c 74 68 3e 26 6e 62 73 70 26 6e 62 73  tr><th>&nbsp&nbs
1bb0: 70 3b 3c 2f 74 68 3e 0a 3c 74 68 3e 4d 79 53 51  p;</th>.<th>MySQ
1bc0: 4c 3c 62 72 3e 33 2e 32 33 2e 34 31 3c 2f 74 68  L<br>3.23.41</th
1bd0: 3e 0a 3c 74 68 3e 4d 79 53 51 4c 3c 62 72 3e 34  >.<th>MySQL<br>4
1be0: 2e 30 2e 31 36 3c 2f 74 68 3e 0a 3c 74 68 3e 46  .0.16</th>.<th>F
1bf0: 69 72 65 62 69 72 64 3c 2f 74 68 3e 0a 3c 74 68  irebird</th>.<th
1c00: 3e 53 51 4c 3c 62 72 3e 41 6e 79 77 68 65 72 65  >SQL<br>Anywhere
1c10: 3c 2f 74 68 3e 0a 3c 74 68 3e 42 6f 72 6c 61 6e  </th>.<th>Borlan
1c20: 64 3c 62 72 3e 49 6e 74 65 72 62 61 73 65 3c 2f  d<br>Interbase</
1c30: 74 68 3e 0a 3c 2f 74 72 3e 0a 0a 3c 74 72 3e 3c  th>.</tr>..<tr><
1c40: 74 64 3e 41 64 64 69 6e 67 20 61 6e 79 74 68 69  td>Adding anythi
1c50: 6e 67 20 74 6f 20 6e 75 6c 6c 20 67 69 76 65 73  ng to null gives
1c60: 20 6e 75 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76   null</td>.<td v
1c70: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
1c80: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
1c90: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
1ca0: 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c  Yes</td>.<td val
1cb0: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69  ign="center" ali
1cc0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f  gn="center" bgco
1cd0: 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65  lor="#a9c7a9">Ye
1ce0: 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  s</td>.<td valig
1cf0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1d00: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1d10: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
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 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 4d  .</tr>.<tr><td>M
1db0: 75 6c 74 69 70 6c 79 69 6e 67 20 6e 75 6c 6c 20  ultiplying null 
1dc0: 62 79 20 7a 65 72 6f 20 67 69 76 65 73 20 6e 75  by zero gives nu
1dd0: 6c 6c 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  ll</td>.<td vali
1de0: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
1df0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
1e00: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
1e10: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
1e20: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
1e30: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
1e40: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
1e50: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
1e60: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
1e70: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
1e80: 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64  #a9c7a9">Yes</td
1e90: 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65  >.<td valign="ce
1ea0: 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e  nter" align="cen
1eb0: 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61  ter" bgcolor="#a
1ec0: 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a  9c7a9">Yes</td>.
1ed0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
1ee0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
1ef0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63  r" bgcolor="#a9c
1f00: 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 2f  7a9">Yes</td>.</
1f10: 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c  tr>.<tr><td>null
1f20: 73 20 61 72 65 20 64 69 73 74 69 6e 63 74 20 69  s are distinct i
1f30: 6e 20 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d  n a UNIQUE colum
1f40: 6e 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  n</td>.<td valig
1f50: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
1f60: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
1f70: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
1f80: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
1f90: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
1fa0: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
1fb0: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
1fc0: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
1fd0: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
1fe0: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
1ff0: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
2000: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
2010: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
2020: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61  er" bgcolor="#aa
2030: 61 61 64 32 22 3e 28 4e 6f 74 65 20 34 29 3c 2f  aad2">(Note 4)</
2040: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
2050: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
2060: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
2070: 23 61 61 61 61 64 32 22 3e 28 4e 6f 74 65 20 34  #aaaad2">(Note 4
2080: 29 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  )</td>.</tr>.<tr
2090: 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72 65 20 64  ><td>nulls are d
20a0: 69 73 74 69 6e 63 74 20 69 6e 20 53 45 4c 45 43  istinct in SELEC
20b0: 54 20 44 49 53 54 49 4e 43 54 3c 2f 74 64 3e 0a  T DISTINCT</td>.
20c0: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
20d0: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
20e0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
20f0: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64  9a9">No</td>.<td
2100: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
2110: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
2120: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
2130: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  ">No</td>.<td va
2140: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2150: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2160: 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e 4e  olor="#c7a9a9">N
2170: 6f 20 28 4e 6f 74 65 20 31 29 3c 2f 74 64 3e 0a  o (Note 1)</td>.
2180: 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74  <td valign="cent
2190: 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65  er" align="cente
21a0: 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61  r" bgcolor="#c7a
21b0: 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64  9a9">No</td>.<td
21c0: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
21d0: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
21e0: 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39  bgcolor="#c7a9a9
21f0: 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a  ">No</td>.</tr>.
2200: 3c 74 72 3e 3c 74 64 3e 6e 75 6c 6c 73 20 61 72  <tr><td>nulls ar
2210: 65 20 64 69 73 74 69 6e 63 74 20 69 6e 20 61 20  e distinct in a 
2220: 55 4e 49 4f 4e 3c 2f 74 64 3e 0a 3c 74 64 20 76  UNION</td>.<td v
2230: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
2240: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
2250: 63 6f 6c 6f 72 3d 22 23 61 61 61 61 64 32 22 3e  color="#aaaad2">
2260: 28 4e 6f 74 65 20 33 29 3c 2f 74 64 3e 0a 3c 74  (Note 3)</td>.<t
2270: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2280: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2290: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
22a0: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74 64 20 76  9">No</td>.<td v
22b0: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
22c0: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
22d0: 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61 39 22 3e  color="#c7a9a9">
22e0: 4e 6f 20 28 4e 6f 74 65 20 31 29 3c 2f 74 64 3e  No (Note 1)</td>
22f0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
2300: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
2310: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37  er" bgcolor="#c7
2320: 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 74  a9a9">No</td>.<t
2330: 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  d valign="center
2340: 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22  " align="center"
2350: 20 62 67 63 6f 6c 6f 72 3d 22 23 63 37 61 39 61   bgcolor="#c7a9a
2360: 39 22 3e 4e 6f 3c 2f 74 64 3e 0a 3c 2f 74 72 3e  9">No</td>.</tr>
2370: 0a 3c 74 72 3e 3c 74 64 3e 22 43 41 53 45 20 57  .<tr><td>"CASE W
2380: 48 45 4e 20 6e 75 6c 6c 20 54 48 45 4e 20 31 20  HEN null THEN 1 
2390: 45 4c 53 45 20 30 20 45 4e 44 22 20 69 73 20 30  ELSE 0 END" is 0
23a0: 3f 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67  ?</td>.<td valig
23b0: 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e  n="center" align
23c0: 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f  ="center" bgcolo
23d0: 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c  r="#a9c7a9">Yes<
23e0: 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d  /td>.<td valign=
23f0: 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22  "center" align="
2400: 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d  center" bgcolor=
2410: 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74  "#a9c7a9">Yes</t
2420: 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63  d>.<td valign="c
2430: 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65  enter" align="ce
2440: 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23  nter" bgcolor="#
2450: 61 39 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e  a9c7a9">Yes</td>
2460: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
2470: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
2480: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
2490: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
24a0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
24b0: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
24c0: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 61 61 61  " bgcolor="#aaaa
24d0: 64 32 22 3e 28 4e 6f 74 65 20 35 29 3c 2f 74 64  d2">(Note 5)</td
24e0: 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  >.</tr>.<tr><td>
24f0: 22 6e 75 6c 6c 20 4f 52 20 74 72 75 65 22 20 69  "null OR true" i
2500: 73 20 74 72 75 65 3c 2f 74 64 3e 0a 3c 74 64 20  s true</td>.<td 
2510: 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20  valign="center" 
2520: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62  align="center" b
2530: 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22  gcolor="#a9c7a9"
2540: 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61  >Yes</td>.<td va
2550: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c  lign="center" al
2560: 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63  ign="center" bgc
2570: 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59  olor="#a9c7a9">Y
2580: 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69  es</td>.<td vali
2590: 67 6e 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67  gn="center" alig
25a0: 6e 3d 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c  n="center" bgcol
25b0: 6f 72 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73  or="#a9c7a9">Yes
25c0: 3c 2f 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e  </td>.<td valign
25d0: 3d 22 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d  ="center" align=
25e0: 22 63 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72  "center" bgcolor
25f0: 3d 22 23 61 39 63 37 61 39 22 3e 59 65 73 3c 2f  ="#a9c7a9">Yes</
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 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64 3e  >.</tr>.<tr><td>
2650: 22 6e 6f 74 20 28 6e 75 6c 6c 20 41 4e 44 20 66  "not (null AND f
2660: 61 6c 73 65 29 22 20 69 73 20 74 72 75 65 3c 2f  alse)" is true</
2670: 74 64 3e 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22  td>.<td valign="
2680: 63 65 6e 74 65 72 22 20 61 6c 69 67 6e 3d 22 63  center" align="c
2690: 65 6e 74 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22  enter" bgcolor="
26a0: 23 63 37 61 39 61 39 22 3e 4e 6f 3c 2f 74 64 3e  #c7a9a9">No</td>
26b0: 0a 3c 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e  .<td valign="cen
26c0: 74 65 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74  ter" align="cent
26d0: 65 72 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39  er" bgcolor="#a9
26e0: 63 37 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c  c7a9">Yes</td>.<
26f0: 74 64 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65  td valign="cente
2700: 72 22 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72  r" align="center
2710: 22 20 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37  " bgcolor="#a9c7
2720: 61 39 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64  a9">Yes</td>.<td
2730: 20 76 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22   valign="center"
2740: 20 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20   align="center" 
2750: 62 67 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39  bgcolor="#a9c7a9
2760: 22 3e 59 65 73 3c 2f 74 64 3e 0a 3c 74 64 20 76  ">Yes</td>.<td v
2770: 61 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 61  align="center" a
2780: 6c 69 67 6e 3d 22 63 65 6e 74 65 72 22 20 62 67  lign="center" bg
2790: 63 6f 6c 6f 72 3d 22 23 61 39 63 37 61 39 22 3e  color="#a9c7a9">
27a0: 59 65 73 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c  Yes</td>.</tr>.<
27b0: 2f 74 61 62 6c 65 3e 0a 0a 3c 74 61 62 6c 65 20  /table>..<table 
27c0: 62 6f 72 64 65 72 3d 30 20 61 6c 69 67 6e 3d 22  border=0 align="
27d0: 72 69 67 68 74 22 20 63 65 6c 6c 70 61 64 64 69  right" cellpaddi
27e0: 6e 67 3d 30 20 63 65 6c 6c 73 70 61 63 69 6e 67  ng=0 cellspacing
27f0: 3d 30 3e 0a 3c 74 72 3e 0a 3c 74 64 20 76 61 6c  =0>.<tr>.<td val
2800: 69 67 6e 3d 22 74 6f 70 22 20 72 6f 77 73 70 61  ign="top" rowspa
2810: 6e 3d 35 3e 4e 6f 74 65 73 3a 26 6e 62 73 70 3b  n=5>Notes:&nbsp;
2820: 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c 74 64 3e  &nbsp;</td>.<td>
2830: 31 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c 74  1.&nbsp;</td>.<t
2840: 64 3e 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73  d>Older versions
2850: 20 6f 66 20 66 69 72 65 62 69 72 64 20 6f 6d 69   of firebird omi
2860: 74 73 20 61 6c 6c 20 4e 55 4c 4c 73 20 66 72 6f  ts all NULLs fro
2870: 6d 20 53 45 4c 45 43 54 20 44 49 53 54 49 4e 43  m SELECT DISTINC
2880: 54 0a 61 6e 64 20 66 72 6f 6d 20 55 4e 49 4f 4e  T.and from UNION
2890: 2e 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72  .</td>.</tr>.<tr
28a0: 3e 3c 74 64 3e 32 2e 26 6e 62 73 70 3b 3c 2f 74  ><td>2.&nbsp;</t
28b0: 64 3e 0a 3c 74 64 3e 54 65 73 74 20 64 61 74 61  d>.<td>Test data
28c0: 20 75 6e 61 76 61 69 6c 61 62 6c 65 2e 3c 2f 74   unavailable.</t
28d0: 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e 3c 74 64  d>.</tr>.<tr><td
28e0: 3e 33 2e 26 6e 62 73 70 3b 3c 2f 74 64 3e 0a 3c  >3.&nbsp;</td>.<
28f0: 74 64 3e 4d 79 53 51 4c 20 76 65 72 73 69 6f 6e  td>MySQL version
2900: 20 33 2e 32 33 2e 34 31 20 64 6f 65 73 20 6e 6f   3.23.41 does no
2910: 74 20 73 75 70 70 6f 72 74 20 55 4e 49 4f 4e 2e  t support UNION.
2920: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
2930: 3c 74 64 3e 34 2e 26 6e 62 73 70 3b 3c 2f 74 64  <td>4.&nbsp;</td
2940: 3e 0a 3c 74 64 3e 53 51 4c 20 41 6e 79 77 68 65  >.<td>SQL Anywhe
2950: 72 65 20 61 6e 64 20 42 6f 72 6c 61 6e 64 20 49  re and Borland I
2960: 6e 74 65 72 62 61 73 65 20 0a 64 6f 20 6e 6f 74  nterbase .do not
2970: 20 61 6c 6c 6f 77 20 4e 55 4c 4c 73 20 69 6e 20   allow NULLs in 
2980: 61 20 55 4e 49 51 55 45 20 63 6f 6c 75 6d 6e 2e  a UNIQUE column.
2990: 3c 2f 74 64 3e 0a 3c 2f 74 72 3e 0a 3c 74 72 3e  </td>.</tr>.<tr>
29a0: 3c 74 64 3e 35 2e 26 6e 62 73 70 3b 3c 2f 74 64  <td>5.&nbsp;</td
29b0: 3e 0a 3c 74 64 3e 42 6f 72 6c 61 6e 64 20 49 6e  >.<td>Borland In
29c0: 74 65 72 62 61 73 65 20 64 6f 65 73 20 6e 6f 74  terbase does not
29d0: 20 73 75 70 70 6f 72 74 20 43 41 53 45 20 65 78   support CASE ex
29e0: 70 72 65 73 73 69 6f 6e 73 2e 3c 2f 74 64 3e 0a  pressions.</td>.
29f0: 3c 2f 74 72 3e 0a 3c 2f 74 61 62 6c 65 3e 0a 3c  </tr>.</table>.<
2a00: 62 72 20 63 6c 65 61 72 3d 22 62 6f 74 68 22 3e  br clear="both">
2a10: 0a 0a 3c 70 3e 26 6e 62 73 70 3b 3c 2f 70 3e 0a  ..<p>&nbsp;</p>.
2a20: 3c 70 3e 0a 54 68 65 20 66 6f 6c 6c 6f 77 69 6e  <p>.The followin
2a30: 67 20 73 63 72 69 70 74 20 77 61 73 20 75 73 65  g script was use
2a40: 64 20 74 6f 20 67 61 74 68 65 72 20 69 6e 66 6f  d to gather info
2a50: 72 6d 61 74 69 6f 6e 20 66 6f 72 20 74 68 65 20  rmation for the 
2a60: 74 61 62 6c 65 0a 61 62 6f 76 65 2e 0a 3c 2f 70  table.above..</p
2a70: 3e 0a 0a 3c 70 72 65 3e 0a 2d 2d 20 49 20 68 61  >..<pre>.-- I ha
2a80: 76 65 20 61 62 6f 75 74 20 64 65 63 69 64 65 64  ve about decided
2a90: 20 74 68 61 74 20 53 51 4c 27 73 20 74 72 65 61   that SQL's trea
2aa0: 74 6d 65 6e 74 20 6f 66 20 4e 55 4c 4c 73 20 69  tment of NULLs i
2ab0: 73 20 63 61 70 72 69 63 69 6f 75 73 20 61 6e 64  s capricious and
2ac0: 20 63 61 6e 6e 6f 74 20 62 65 0a 2d 2d 20 64 65   cannot be.-- de
2ad0: 64 75 63 65 64 20 62 79 20 6c 6f 67 69 63 2e 20  duced by logic. 
2ae0: 20 49 74 20 6d 75 73 74 20 62 65 20 64 69 73 63   It must be disc
2af0: 6f 76 65 72 65 64 20 62 79 20 65 78 70 65 72 69  overed by experi
2b00: 6d 65 6e 74 2e 20 20 54 6f 20 74 68 61 74 20 65  ment.  To that e
2b10: 6e 64 2c 20 49 20 68 61 76 65 20 0a 2d 2d 20 70  nd, I have .-- p
2b20: 72 65 70 61 72 65 64 20 74 68 65 20 66 6f 6c 6c  repared the foll
2b30: 6f 77 69 6e 67 20 73 63 72 69 70 74 20 74 6f 20  owing script to 
2b40: 74 65 73 74 20 68 6f 77 20 76 61 72 69 6f 75 73  test how various
2b50: 20 53 51 4c 20 64 61 74 61 62 61 73 65 73 20 64   SQL databases d
2b60: 65 61 6c 20 77 69 74 68 20 4e 55 4c 4c 2e 0a 2d  eal with NULL..-
2b70: 2d 20 4d 79 20 61 69 6d 20 69 73 20 74 6f 20 75  - My aim is to u
2b80: 73 65 20 74 68 65 20 69 6e 66 6f 72 6d 61 74 69  se the informati
2b90: 6f 6e 20 67 61 74 68 65 72 20 66 72 6f 6d 20 74  on gather from t
2ba0: 68 69 73 20 73 63 72 69 70 74 20 74 6f 20 6d 61  his script to ma
2bb0: 6b 65 20 53 51 4c 69 74 65 20 61 73 20 6d 75 63  ke SQLite as muc
2bc0: 68 0a 2d 2d 20 6c 69 6b 65 20 6f 74 68 65 72 20  h.-- like other 
2bd0: 64 61 74 61 62 61 73 65 73 20 61 73 20 70 6f 73  databases as pos
2be0: 73 69 62 6c 65 2e 0a 2d 2d 0a 2d 2d 20 49 66 20  sible..--.-- If 
2bf0: 79 6f 75 20 63 6f 75 6c 64 20 70 6c 65 61 73 65  you could please
2c00: 20 72 75 6e 20 74 68 69 73 20 73 63 72 69 70 74   run this script
2c10: 20 69 6e 20 79 6f 75 72 20 64 61 74 61 62 61 73   in your databas
2c20: 65 20 65 6e 67 69 6e 65 20 61 6e 64 20 6d 61 69  e engine and mai
2c30: 6c 20 74 68 65 20 72 65 73 75 6c 74 73 0a 2d 2d  l the results.--
2c40: 20 74 6f 20 6d 65 20 61 74 20 64 72 68 40 68 77   to me at drh@hw
2c50: 61 63 69 2e 63 6f 6d 2c 20 74 68 61 74 20 77 69  aci.com, that wi
2c60: 6c 6c 20 62 65 20 61 20 62 69 67 20 68 65 6c 70  ll be a big help
2c70: 2e 20 20 50 6c 65 61 73 65 20 62 65 20 73 75 72  .  Please be sur
2c80: 65 20 74 6f 20 69 64 65 6e 74 69 66 79 20 74 68  e to identify th
2c90: 65 0a 2d 2d 20 64 61 74 61 62 61 73 65 20 65 6e  e.-- database en
2ca0: 67 69 6e 65 20 79 6f 75 20 75 73 65 20 66 6f 72  gine you use for
2cb0: 20 74 68 69 73 20 74 65 73 74 2e 20 20 54 68 61   this test.  Tha
2cc0: 6e 6b 73 2e 0a 2d 2d 0a 2d 2d 20 49 66 20 79 6f  nks..--.-- If yo
2cd0: 75 20 68 61 76 65 20 74 6f 20 63 68 61 6e 67 65  u have to change
2ce0: 20 61 6e 79 74 68 69 6e 67 20 74 6f 20 67 65 74   anything to get
2cf0: 20 74 68 69 73 20 73 63 72 69 70 74 20 74 6f 20   this script to 
2d00: 72 75 6e 20 77 69 74 68 20 79 6f 75 72 20 64 61  run with your da
2d10: 74 61 62 61 73 65 0a 2d 2d 20 65 6e 67 69 6e 65  tabase.-- engine
2d20: 2c 20 70 6c 65 61 73 65 20 73 65 6e 64 20 79 6f  , please send yo
2d30: 75 72 20 72 65 76 69 73 65 64 20 73 63 72 69 70  ur revised scrip
2d40: 74 20 74 6f 67 65 74 68 65 72 20 77 69 74 68 20  t together with 
2d50: 79 6f 75 72 20 72 65 73 75 6c 74 73 2e 0a 2d 2d  your results..--
2d60: 0a 0a 2d 2d 20 43 72 65 61 74 65 20 61 20 74 65  ..-- Create a te
2d70: 73 74 20 74 61 62 6c 65 20 77 69 74 68 20 64 61  st table with da
2d80: 74 61 0a 63 72 65 61 74 65 20 74 61 62 6c 65 20  ta.create table 
2d90: 74 31 28 61 20 69 6e 74 2c 20 62 20 69 6e 74 2c  t1(a int, b int,
2da0: 20 63 20 69 6e 74 29 3b 0a 69 6e 73 65 72 74 20   c int);.insert 
2db0: 69 6e 74 6f 20 74 31 20 76 61 6c 75 65 73 28 31  into t1 values(1
2dc0: 2c 30 2c 30 29 3b 0a 69 6e 73 65 72 74 20 69 6e  ,0,0);.insert in
2dd0: 74 6f 20 74 31 20 76 61 6c 75 65 73 28 32 2c 30  to t1 values(2,0
2de0: 2c 31 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f  ,1);.insert into
2df0: 20 74 31 20 76 61 6c 75 65 73 28 33 2c 31 2c 30   t1 values(3,1,0
2e00: 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74  );.insert into t
2e10: 31 20 76 61 6c 75 65 73 28 34 2c 31 2c 31 29 3b  1 values(4,1,1);
2e20: 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31 20  .insert into t1 
2e30: 76 61 6c 75 65 73 28 35 2c 6e 75 6c 6c 2c 30 29  values(5,null,0)
2e40: 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74 31  ;.insert into t1
2e50: 20 76 61 6c 75 65 73 28 36 2c 6e 75 6c 6c 2c 31   values(6,null,1
2e60: 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74 6f 20 74  );.insert into t
2e70: 31 20 76 61 6c 75 65 73 28 37 2c 6e 75 6c 6c 2c  1 values(7,null,
2e80: 6e 75 6c 6c 29 3b 0a 0a 2d 2d 20 43 68 65 63 6b  null);..-- Check
2e90: 20 74 6f 20 73 65 65 20 77 68 61 74 20 43 41 53   to see what CAS
2ea0: 45 20 64 6f 65 73 20 77 69 74 68 20 4e 55 4c 4c  E does with NULL
2eb0: 73 20 69 6e 20 69 74 73 20 74 65 73 74 20 65 78  s in its test ex
2ec0: 70 72 65 73 73 69 6f 6e 73 0a 73 65 6c 65 63 74  pressions.select
2ed0: 20 61 2c 20 63 61 73 65 20 77 68 65 6e 20 62 3c   a, case when b<
2ee0: 3e 30 20 74 68 65 6e 20 31 20 65 6c 73 65 20 30  >0 then 1 else 0
2ef0: 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65   end from t1;.se
2f00: 6c 65 63 74 20 61 2b 31 30 2c 20 63 61 73 65 20  lect a+10, case 
2f10: 77 68 65 6e 20 6e 6f 74 20 62 3c 3e 30 20 74 68  when not b<>0 th
2f20: 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20  en 1 else 0 end 
2f30: 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20  from t1;.select 
2f40: 61 2b 32 30 2c 20 63 61 73 65 20 77 68 65 6e 20  a+20, case when 
2f50: 62 3c 3e 30 20 61 6e 64 20 63 3c 3e 30 20 74 68  b<>0 and c<>0 th
2f60: 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20  en 1 else 0 end 
2f70: 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20  from t1;.select 
2f80: 61 2b 33 30 2c 20 63 61 73 65 20 77 68 65 6e 20  a+30, case when 
2f90: 6e 6f 74 20 28 62 3c 3e 30 20 61 6e 64 20 63 3c  not (b<>0 and c<
2fa0: 3e 30 29 20 74 68 65 6e 20 31 20 65 6c 73 65 20  >0) then 1 else 
2fb0: 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73  0 end from t1;.s
2fc0: 65 6c 65 63 74 20 61 2b 34 30 2c 20 63 61 73 65  elect a+40, case
2fd0: 20 77 68 65 6e 20 62 3c 3e 30 20 6f 72 20 63 3c   when b<>0 or c<
2fe0: 3e 30 20 74 68 65 6e 20 31 20 65 6c 73 65 20 30  >0 then 1 else 0
2ff0: 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 73 65   end from t1;.se
3000: 6c 65 63 74 20 61 2b 35 30 2c 20 63 61 73 65 20  lect a+50, case 
3010: 77 68 65 6e 20 6e 6f 74 20 28 62 3c 3e 30 20 6f  when not (b<>0 o
3020: 72 20 63 3c 3e 30 29 20 74 68 65 6e 20 31 20 65  r c<>0) then 1 e
3030: 6c 73 65 20 30 20 65 6e 64 20 66 72 6f 6d 20 74  lse 0 end from t
3040: 31 3b 0a 73 65 6c 65 63 74 20 61 2b 36 30 2c 20  1;.select a+60, 
3050: 63 61 73 65 20 62 20 77 68 65 6e 20 63 20 74 68  case b when c th
3060: 65 6e 20 31 20 65 6c 73 65 20 30 20 65 6e 64 20  en 1 else 0 end 
3070: 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65 63 74 20  from t1;.select 
3080: 61 2b 37 30 2c 20 63 61 73 65 20 63 20 77 68 65  a+70, case c whe
3090: 6e 20 62 20 74 68 65 6e 20 31 20 65 6c 73 65 20  n b then 1 else 
30a0: 30 20 65 6e 64 20 66 72 6f 6d 20 74 31 3b 0a 0a  0 end from t1;..
30b0: 2d 2d 20 57 68 61 74 20 68 61 70 70 65 6e 73 20  -- What happens 
30c0: 77 68 65 6e 20 79 6f 75 20 6d 75 6c 74 69 70 6c  when you multipl
30d0: 65 20 61 20 4e 55 4c 4c 20 62 79 20 7a 65 72 6f  e a NULL by zero
30e0: 3f 0a 73 65 6c 65 63 74 20 61 2b 38 30 2c 20 62  ?.select a+80, b
30f0: 2a 30 20 66 72 6f 6d 20 74 31 3b 0a 73 65 6c 65  *0 from t1;.sele
3100: 63 74 20 61 2b 39 30 2c 20 62 2a 63 20 66 72 6f  ct a+90, b*c fro
3110: 6d 20 74 31 3b 0a 0a 2d 2d 20 57 68 61 74 20 68  m t1;..-- What h
3120: 61 70 70 65 6e 73 20 74 6f 20 4e 55 4c 4c 20 66  appens to NULL f
3130: 6f 72 20 6f 74 68 65 72 20 6f 70 65 72 61 74 6f  or other operato
3140: 72 73 3f 0a 73 65 6c 65 63 74 20 61 2b 31 30 30  rs?.select a+100
3150: 2c 20 62 2b 63 20 66 72 6f 6d 20 74 31 3b 0a 0a  , b+c from t1;..
3160: 2d 2d 20 54 65 73 74 20 74 68 65 20 74 72 65 61  -- Test the trea
3170: 74 6d 65 6e 74 20 6f 66 20 61 67 67 72 65 67 61  tment of aggrega
3180: 74 65 20 6f 70 65 72 61 74 6f 72 73 0a 73 65 6c  te operators.sel
3190: 65 63 74 20 63 6f 75 6e 74 28 2a 29 2c 20 63 6f  ect count(*), co
31a0: 75 6e 74 28 62 29 2c 20 73 75 6d 28 62 29 2c 20  unt(b), sum(b), 
31b0: 61 76 67 28 62 29 2c 20 6d 69 6e 28 62 29 2c 20  avg(b), min(b), 
31c0: 6d 61 78 28 62 29 20 66 72 6f 6d 20 74 31 3b 0a  max(b) from t1;.
31d0: 0a 2d 2d 20 43 68 65 63 6b 20 74 68 65 20 62 65  .-- Check the be
31e0: 68 61 76 69 6f 72 20 6f 66 20 4e 55 4c 4c 73 20  havior of NULLs 
31f0: 69 6e 20 57 48 45 52 45 20 63 6c 61 75 73 65 73  in WHERE clauses
3200: 0a 73 65 6c 65 63 74 20 61 2b 31 31 30 20 66 72  .select a+110 fr
3210: 6f 6d 20 74 31 20 77 68 65 72 65 20 62 3c 31 30  om t1 where b<10
3220: 3b 0a 73 65 6c 65 63 74 20 61 2b 31 32 30 20 66  ;.select a+120 f
3230: 72 6f 6d 20 74 31 20 77 68 65 72 65 20 6e 6f 74  rom t1 where not
3240: 20 62 3e 31 30 3b 0a 73 65 6c 65 63 74 20 61 2b   b>10;.select a+
3250: 31 33 30 20 66 72 6f 6d 20 74 31 20 77 68 65 72  130 from t1 wher
3260: 65 20 62 3c 31 30 20 4f 52 20 63 3d 31 3b 0a 73  e b<10 OR c=1;.s
3270: 65 6c 65 63 74 20 61 2b 31 34 30 20 66 72 6f 6d  elect a+140 from
3280: 20 74 31 20 77 68 65 72 65 20 62 3c 31 30 20 41   t1 where b<10 A
3290: 4e 44 20 63 3d 31 3b 0a 73 65 6c 65 63 74 20 61  ND c=1;.select a
32a0: 2b 31 35 30 20 66 72 6f 6d 20 74 31 20 77 68 65  +150 from t1 whe
32b0: 72 65 20 6e 6f 74 20 28 62 3c 31 30 20 41 4e 44  re not (b<10 AND
32c0: 20 63 3d 31 29 3b 0a 73 65 6c 65 63 74 20 61 2b   c=1);.select a+
32d0: 31 36 30 20 66 72 6f 6d 20 74 31 20 77 68 65 72  160 from t1 wher
32e0: 65 20 6e 6f 74 20 28 63 3d 31 20 41 4e 44 20 62  e not (c=1 AND b
32f0: 3c 31 30 29 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20  <10);..-- Check 
3300: 74 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20  the behavior of 
3310: 4e 55 4c 4c 73 20 69 6e 20 61 20 44 49 53 54 49  NULLs in a DISTI
3320: 4e 43 54 20 71 75 65 72 79 0a 73 65 6c 65 63 74  NCT query.select
3330: 20 64 69 73 74 69 6e 63 74 20 62 20 66 72 6f 6d   distinct b from
3340: 20 74 31 3b 0a 0a 2d 2d 20 43 68 65 63 6b 20 74   t1;..-- Check t
3350: 68 65 20 62 65 68 61 76 69 6f 72 20 6f 66 20 4e  he behavior of N
3360: 55 4c 4c 73 20 69 6e 20 61 20 55 4e 49 4f 4e 20  ULLs in a UNION 
3370: 71 75 65 72 79 0a 73 65 6c 65 63 74 20 62 20 66  query.select b f
3380: 72 6f 6d 20 74 31 20 75 6e 69 6f 6e 20 73 65 6c  rom t1 union sel
3390: 65 63 74 20 62 20 66 72 6f 6d 20 74 31 3b 0a 0a  ect b from t1;..
33a0: 2d 2d 20 43 72 65 61 74 65 20 61 20 6e 65 77 20  -- Create a new 
33b0: 74 61 62 6c 65 20 77 69 74 68 20 61 20 75 6e 69  table with a uni
33c0: 71 75 65 20 63 6f 6c 75 6d 6e 2e 20 20 43 68 65  que column.  Che
33d0: 63 6b 20 74 6f 20 73 65 65 20 69 66 20 4e 55 4c  ck to see if NUL
33e0: 4c 73 20 61 72 65 20 63 6f 6e 73 69 64 65 72 65  Ls are considere
33f0: 64 0a 2d 2d 20 74 6f 20 62 65 20 64 69 73 74 69  d.-- to be disti
3400: 6e 63 74 2e 0a 63 72 65 61 74 65 20 74 61 62 6c  nct..create tabl
3410: 65 20 74 32 28 61 20 69 6e 74 2c 20 62 20 69 6e  e t2(a int, b in
3420: 74 20 75 6e 69 71 75 65 29 3b 0a 69 6e 73 65 72  t unique);.inser
3430: 74 20 69 6e 74 6f 20 74 32 20 76 61 6c 75 65 73  t into t2 values
3440: 28 31 2c 31 29 3b 0a 69 6e 73 65 72 74 20 69 6e  (1,1);.insert in
3450: 74 6f 20 74 32 20 76 61 6c 75 65 73 28 32 2c 6e  to t2 values(2,n
3460: 75 6c 6c 29 3b 0a 69 6e 73 65 72 74 20 69 6e 74  ull);.insert int
3470: 6f 20 74 32 20 76 61 6c 75 65 73 28 33 2c 6e 75  o t2 values(3,nu
3480: 6c 6c 29 3b 0a 73 65 6c 65 63 74 20 2a 20 66 72  ll);.select * fr
3490: 6f 6d 20 74 32 3b 0a 0a 64 72 6f 70 20 74 61 62  om t2;..drop tab
34a0: 6c 65 20 74 31 3b 0a 64 72 6f 70 20 74 61 62 6c  le t1;.drop tabl
34b0: 65 20 74 32 3b 0a 3c 2f 70 72 65 3e 0a 0a 3c 70  e t2;.</pre>..<p
34c0: 3e 3c 68 72 20 2f 3e 3c 2f 70 3e 0a 3c 70 3e 3c  ><hr /></p>.<p><
34d0: 61 20 68 72 65 66 3d 22 69 6e 64 65 78 2e 68 74  a href="index.ht
34e0: 6d 6c 22 3e 3c 69 6d 67 20 73 72 63 3d 22 2f 67  ml"><img src="/g
34f0: 6f 62 61 63 6b 2e 6a 70 67 22 20 62 6f 72 64 65  oback.jpg" borde
3500: 72 3d 30 20 2f 3e 0a 42 61 63 6b 20 74 6f 20 74  r=0 />.Back to t
3510: 68 65 20 53 51 4c 69 74 65 20 48 6f 6d 65 20 50  he SQLite Home P
3520: 61 67 65 3c 2f 61 3e 0a 3c 2f 70 3e 0a 3c 2f 62  age</a>.</p>.</b
3530: 6f 64 79 3e 0a 3c 2f 68 74 6d 6c 3e 0a 7d 0a     ody>.</html>.}.