]> git.ipfire.org Git - thirdparty/sqlite.git/commitdiff
Many new PG-confirmed test cases in joinD.test.
authordrh <>
Tue, 31 May 2022 14:19:04 +0000 (14:19 +0000)
committerdrh <>
Tue, 31 May 2022 14:19:04 +0000 (14:19 +0000)
FossilOrigin-Name: 481e89c764ad8906cd21c8fbe58df57ae40bb3f261fa4892ea7ce7762786ad26

manifest
manifest.uuid
test/joinD.test

index f6bd2a52fb2e30f21e6568892788857a9f389e45..c6ce69d275dfe40735ae01f1b88e6aac9ee14411 100644 (file)
--- a/manifest
+++ b/manifest
@@ -1,5 +1,5 @@
-C Restore\san\sON-clause\stest\scase\s(removed\sby\s[3869fd9a2b9483cb])\sthat\sturns\sout\nto\sbe\snecessary\sfor\scorrect\soperation.\s\sFix\sfor\n[forum:/forumpost/c2554d560bac97c5|forum\spost\sc2554d560bac97c5].
-D 2022-05-31T11:22:30.440
+C Many\snew\sPG-confirmed\stest\scases\sin\sjoinD.test.
+D 2022-05-31T14:19:04.375
 F .fossil-settings/empty-dirs dbb81e8fc0401ac46a1491ab34a7f2c7c0452f2f06b54ebb845d024ca8283ef1
 F .fossil-settings/ignore-glob 35175cdfcf539b2318cb04a9901442804be81cd677d8b889fcc9149c21f239ea
 F LICENSE.md df5091916dbb40e6e9686186587125e1b2ff51f022cc334e886c19a0e9982724
@@ -1168,7 +1168,7 @@ F test/join9.test 9056ddd3b0c0f4f9d658f4521038d9a37dc23ead8ca9a505d0b0db2b6a471e
 F test/joinA.test 7eab225dc1c1ab258a5e62513a4ed7cabbd3db971d59d5d92f4fb6fa14c12f6a
 F test/joinB.test 1b2ba3fc8568b49411787fccbf540570c148e9b6a53a30f80691cb6268098ded
 F test/joinC.test 1f1a602c2127f55f136e2cbd3bf2d26546614bf8cffe5902ec1ac9c07f87f207
-F test/joinD.test 7f0f4dd1f2767330bf1fda5c9cc8a437015a54bcd2355036b4d04ddfc1519d76
+F test/joinD.test 1a430af8dac5b68663f13df534ffe98775e582bac2305b80f1e8eb4ab778672a
 F test/joinE.test d5d182f3812771e2c0d97c9dcf5dbe4c41c8e21c82560e59358731c4a3981d6b
 F test/journal1.test c7b768041b7f494471531e17abc2f4f5ebf9e5096984f43ed17c4eb80ba34497
 F test/journal2.test 9dac6b4ba0ca79c3b21446bbae993a462c2397c4
@@ -1970,9 +1970,8 @@ F vsixtest/vsixtest.tcl 6a9a6ab600c25a91a7acc6293828957a386a8a93
 F vsixtest/vsixtest.vcxproj.data 2ed517e100c66dc455b492e1a33350c1b20fbcdc
 F vsixtest/vsixtest.vcxproj.filters 37e51ffedcdb064aad6ff33b6148725226cd608e
 F vsixtest/vsixtest_TemporaryKey.pfx e5b1b036facdb453873e7084e1cae9102ccc67a0
-P 40925585f1dab25babac46a0f4b9d633315110b8d4ccb04cc6df115d167e5ab4 aba52a90eef2a5d06e7c499fe84b2efcde7f01e67129058f8223a6a0272aacb9
-R f138f0ef0f5ba689f0a3ad2e9e4fd0b4
-T +closed aba52a90eef2a5d06e7c499fe84b2efcde7f01e67129058f8223a6a0272aacb9
+P f407ec678f5bf5bfd20b7ba596472c9a85e6f21383a4cde49af1dae542fff582
+R 4b688091ccdeeb4cb2cdaf58d2c1e9de
 U drh
-Z 3ad09955aee6fde579cebffd82e3b590
+Z db4011ea31b9d61b51e34686f863c59f
 # Remove this line to create a well-formed Fossil manifest.
index c3ff5166f390fa2b43b9b27ac602858f12ba0606..792949b3e2634c77371b33842a0b70095165f0b3 100644 (file)
@@ -1 +1 @@
-f407ec678f5bf5bfd20b7ba596472c9a85e6f21383a4cde49af1dae542fff582
\ No newline at end of file
+481e89c764ad8906cd21c8fbe58df57ae40bb3f261fa4892ea7ce7762786ad26
\ No newline at end of file
index aba1d62800d53230a0213dff2e6e06c005303eb3..c520d6a285cfc09ebe9259aa8623352dc1211307 100644 (file)
@@ -1,4 +1,5 @@
 # 2022-05-04
+# revised 2022-05-31
 #
 # The author disclaims copyright to this source code.  In place of
 # a legal notice, here is a blessing:
@@ -65,266 +66,93 @@ do_execsql_test joinD-1 {
 }
 do_execsql_test joinD-2 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
   INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
   90 190 290 390 190 90 290 90 390 90
 }
 do_execsql_test joinD-3 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
   INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   30 130 230 330 130 30 230 30 330 30
   60 160 260 360 160 60 260 60 360 60
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
 do_execsql_test joinD-4 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
   INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
 do_execsql_test joinD-5 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 INNER JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
   INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-  10 110 210 310 110 10   -  - 310 10
-  20 120 220 320 120 20   -  - 320 20
   30 130 230 330 130 30 230 30 330 30
-  40 140 240 340 140 40   -  - 340 40
-  50 150 250 350 150 50   -  - 350 50
   60 160 260 360 160 60 260 60 360 60
-  70 170 270 370 170 70   -  - 370 70
-  80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
 }
 do_execsql_test joinD-6 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   2 102 202 302 102  2   -  -   -  -
-   4 104 204 304 104  4   -  -   -  -
-   6 106 206 306 106  6 206  6   -  -
-   8 108 208 308 108  8   -  -   -  -
-  10 110 210 310 110 10   -  - 310 10
-  12 112 212 312 112 12 212 12   -  -
-  14 114 214 314 114 14   -  -   -  -
-  16 116 216 316 116 16   -  -   -  -
-  18 118 218 318 118 18 218 18   -  -
-  20 120 220 320 120 20   -  - 320 20
-  22 122 222 322 122 22   -  -   -  -
-  24 124 224 324 124 24 224 24   -  -
-  26 126 226 326 126 26   -  -   -  -
-  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  32 132 232 332 132 32   -  -   -  -
-  34 134 234 334 134 34   -  -   -  -
-  36 136 236 336 136 36 236 36   -  -
-  38 138 238 338 138 38   -  -   -  -
-  40 140 240 340 140 40   -  - 340 40
-  42 142 242 342 142 42 242 42   -  -
-  44 144 244 344 144 44   -  -   -  -
-  46 146 246 346 146 46   -  -   -  -
-  48 148 248 348 148 48 248 48   -  -
-  50 150 250 350 150 50   -  - 350 50
-  52 152 252 352 152 52   -  -   -  -
-  54 154 254 354 154 54 254 54   -  -
-  56 156 256 356 156 56   -  -   -  -
-  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  62 162 262 362 162 62   -  -   -  -
-  64 164 264 364 164 64   -  -   -  -
-  66 166 266 366 166 66 266 66   -  -
-  68 168 268 368 168 68   -  -   -  -
-  70 170 270 370 170 70   -  - 370 70
-  72 172 272 372 172 72 272 72   -  -
-  74 174 274 374 174 74   -  -   -  -
-  76 176 276 376 176 76   -  -   -  -
-  78 178 278 378 178 78 278 78   -  -
-  80 180 280 380 180 80   -  - 380 80
-  82 182 282 382 182 82   -  -   -  -
-  84 184 284 384 184 84 284 84   -  -
-  86 186 286 386 186 86   -  -   -  -
-  88 188 288 388 188 88   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  92 192 292 392 192 92   -  -   -  -
-  94 194 294 394 194 94   -  -   -  -
 }
 do_execsql_test joinD-7 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-  10 110 210 310 110 10   -  - 310 10
-  20 120 220 320 120 20   -  - 320 20
   30 130 230 330 130 30 230 30 330 30
-  40 140 240 340 140 40   -  - 340 40
-  50 150 250 350 150 50   -  - 350 50
   60 160 260 360 160 60 260 60 360 60
-  70 170 270 370 170 70   -  - 370 70
-  80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
 do_execsql_test joinD-8 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   2 102 202 302 102  2   -  -   -  -
-   4 104 204 304 104  4   -  -   -  -
-   6 106 206 306 106  6 206  6   -  -
-   8 108 208 308 108  8   -  -   -  -
-  10 110 210 310 110 10   -  - 310 10
-  12 112 212 312 112 12 212 12   -  -
-  14 114 214 314 114 14   -  -   -  -
-  16 116 216 316 116 16   -  -   -  -
-  18 118 218 318 118 18 218 18   -  -
-  20 120 220 320 120 20   -  - 320 20
-  22 122 222 322 122 22   -  -   -  -
-  24 124 224 324 124 24 224 24   -  -
-  26 126 226 326 126 26   -  -   -  -
-  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  32 132 232 332 132 32   -  -   -  -
-  34 134 234 334 134 34   -  -   -  -
-  36 136 236 336 136 36 236 36   -  -
-  38 138 238 338 138 38   -  -   -  -
-  40 140 240 340 140 40   -  - 340 40
-  42 142 242 342 142 42 242 42   -  -
-  44 144 244 344 144 44   -  -   -  -
-  46 146 246 346 146 46   -  -   -  -
-  48 148 248 348 148 48 248 48   -  -
-  50 150 250 350 150 50   -  - 350 50
-  52 152 252 352 152 52   -  -   -  -
-  54 154 254 354 154 54 254 54   -  -
-  56 156 256 356 156 56   -  -   -  -
-  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  62 162 262 362 162 62   -  -   -  -
-  64 164 264 364 164 64   -  -   -  -
-  66 166 266 366 166 66 266 66   -  -
-  68 168 268 368 168 68   -  -   -  -
-  70 170 270 370 170 70   -  - 370 70
-  72 172 272 372 172 72 272 72   -  -
-  74 174 274 374 174 74   -  -   -  -
-  76 176 276 376 176 76   -  -   -  -
-  78 178 278 378 178 78 278 78   -  -
-  80 180 280 380 180 80   -  - 380 80
-  82 182 282 382 182 82   -  -   -  -
-  84 184 284 384 184 84 284 84   -  -
-  86 186 286 386 186 86   -  -   -  -
-  88 188 288 388 188 88   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  92 192 292 392 192 92   -  -   -  -
-  94 194 294 394 194 94   -  -   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
 do_execsql_test joinD-9 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   30 130 230 330 130 30 230 30 330 30
@@ -333,251 +161,32608 @@ do_execsql_test joinD-9 {
 }
 do_execsql_test joinD-10 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
 }
 do_execsql_test joinD-11 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   30 130 230 330 130 30 230 30 330 30
   60 160 260 360 160 60 260 60 360 60
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
 do_execsql_test joinD-12 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-13 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-14 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-15 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-16 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-17 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-18 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-19 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-20 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-21 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-22 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-23 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-24 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-25 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-26 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-27 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-28 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-29 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-30 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-31 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-32 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-33 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-34 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-35 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-36 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-37 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-38 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-39 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-40 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-41 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-42 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-43 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-44 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-45 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-46 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-47 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-48 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-49 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-50 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-51 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-52 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-53 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-54 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-55 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-56 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-57 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-58 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-59 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-60 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-61 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-62 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-63 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-64 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-65 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-66 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-67 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-68 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-69 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-70 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-71 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-72 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-73 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-74 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-75 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-76 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-77 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-78 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-79 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-80 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-81 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-82 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-83 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-84 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-85 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-86 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-87 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-88 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-89 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-90 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-91 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-92 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-93 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-94 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-95 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-96 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-97 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-98 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-99 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-100 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-101 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-102 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-103 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-104 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-105 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-106 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-107 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-108 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-109 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-110 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-111 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-112 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-113 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-114 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-115 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-116 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-117 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-118 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-119 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-120 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-121 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-122 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-123 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-124 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-125 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-126 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-127 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-128 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-129 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-130 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-131 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-132 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-133 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-134 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-135 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-136 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-137 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-138 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-139 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-140 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-141 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-142 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-143 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-144 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-145 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-146 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-147 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-148 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-149 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-150 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-151 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-152 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-153 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-154 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-155 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-156 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-157 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-158 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-159 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-160 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-161 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-162 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-163 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-164 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-165 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-166 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-167 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-168 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-169 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-170 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-171 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-172 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-173 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-174 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-175 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-176 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-177 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-178 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-179 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-180 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-181 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-182 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-183 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-184 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-185 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-186 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-187 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-188 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-189 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-190 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-191 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-192 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-193 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-194 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-195 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-196 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-197 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-198 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-199 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-200 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-201 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-202 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-203 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-204 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-205 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-206 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-207 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-208 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-209 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-210 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-211 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-212 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-213 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-214 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-215 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-216 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-217 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-218 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-219 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-220 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-221 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-222 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-223 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-224 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-225 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-226 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-227 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-228 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-229 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-230 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-231 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-232 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-233 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-234 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-235 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-236 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-237 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-238 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-239 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-240 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-241 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-242 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-243 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-244 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-245 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-246 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-247 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-248 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-249 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-250 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-251 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-252 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-253 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-254 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-255 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-256 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-257 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-258 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-259 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-260 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-261 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-262 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-263 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-264 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-265 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-266 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-267 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-268 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-269 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-270 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-271 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-272 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-273 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-274 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-275 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-276 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-277 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-278 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-279 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-280 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-281 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-282 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-283 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-284 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-285 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-286 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-287 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-288 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-289 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-290 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-291 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-292 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-293 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-294 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-295 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-296 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-297 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-298 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-299 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-300 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 INNER JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-301 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-302 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-303 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-304 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-305 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-306 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-307 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-308 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-309 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-310 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-311 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-312 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-313 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-314 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-315 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-316 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-317 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-318 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-319 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-320 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-321 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-322 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-323 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-324 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-325 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-326 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-327 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-328 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-329 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-330 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-331 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-332 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-333 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-334 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-335 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-336 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-337 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-338 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-339 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-340 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-341 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-342 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-343 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-344 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-345 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-346 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-347 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-348 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-349 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-350 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-351 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-352 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-353 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-354 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-355 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-356 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-357 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-358 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-359 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-360 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-361 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-362 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-363 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-364 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-365 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-366 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-367 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-368 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-369 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-370 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-371 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-372 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-373 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-374 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-375 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-376 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-377 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-378 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-379 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-380 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-381 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-382 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-383 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-384 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-385 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-386 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-387 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-388 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-389 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-390 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-391 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-392 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-393 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-394 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-395 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-396 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-397 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-398 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-399 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-400 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-401 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-402 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-403 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-404 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-405 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-406 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-407 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-408 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-409 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-410 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-411 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-412 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-413 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-414 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-415 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-416 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-417 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-418 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-419 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-420 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-421 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-422 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-423 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-424 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-425 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-426 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-427 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-428 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-429 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-430 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-431 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-432 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-433 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-434 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-435 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-436 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-437 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-438 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-439 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-440 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-441 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-442 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-443 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-444 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-445 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-446 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-447 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-448 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-449 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-450 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-451 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-452 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-453 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-454 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-455 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-456 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-457 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-458 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-459 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-460 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-461 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-462 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-463 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-464 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-465 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-466 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-467 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-468 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-469 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-470 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-471 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-472 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-473 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-474 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-475 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-476 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-477 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-478 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-479 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-480 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-481 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-482 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-483 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-484 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-485 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-486 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-487 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-488 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-489 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-490 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-491 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-492 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-493 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-494 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-495 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-496 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-497 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-498 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-499 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-500 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-501 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-502 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-503 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-504 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-505 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-506 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-507 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-508 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-509 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-510 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-511 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-512 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-513 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-514 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-515 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-516 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-517 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-518 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-519 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-520 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-521 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-522 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-523 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-524 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-525 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-526 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-527 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-528 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-529 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-530 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-531 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-532 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-533 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-534 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-535 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-536 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-537 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-538 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-539 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-540 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-541 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-542 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-543 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-544 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-545 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-546 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-547 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-548 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-549 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-550 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-551 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-552 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-553 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-554 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-555 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-556 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-557 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-558 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-559 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-560 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-561 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-562 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-563 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-564 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-565 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-566 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-567 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-568 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-569 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-570 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-571 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-572 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-573 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-574 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-575 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-576 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-577 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-578 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-579 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-580 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-581 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-582 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-583 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-584 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-585 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-586 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-587 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-588 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-589 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-590 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-591 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-592 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-593 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-594 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-595 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-596 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-597 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-598 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-599 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-600 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 LEFT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-601 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-602 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-603 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-604 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-605 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-606 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-607 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-608 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-609 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-610 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-611 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-612 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-613 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-614 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-615 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-616 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-617 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-618 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-619 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-620 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-621 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-622 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-623 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-624 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-625 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-626 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-627 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-628 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-629 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-630 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-631 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-632 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-633 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-634 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-635 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-636 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-637 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-638 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-639 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-640 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-641 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-642 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-643 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-644 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-645 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-646 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-647 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-648 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-649 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-650 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-651 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-652 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-653 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-654 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-655 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-656 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-657 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-658 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-659 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-660 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-661 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-662 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-663 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-664 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-665 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-666 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-667 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-668 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-669 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-670 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-671 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-672 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-673 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-674 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-675 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-676 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-677 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-678 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-679 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-680 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-681 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-682 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-683 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-684 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-685 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-686 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-687 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-688 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-689 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-690 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-691 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-692 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-693 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-694 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-695 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-696 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-697 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-698 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-699 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-700 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-701 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-702 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-703 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-704 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-705 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-706 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-707 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-708 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-709 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-710 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-711 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-712 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-713 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-714 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-715 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-716 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-717 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-718 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-719 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-720 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-721 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-722 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-723 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-724 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-725 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-726 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-727 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-728 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-729 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-730 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-731 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-732 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-733 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-734 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-735 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-736 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-737 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-738 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-739 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-740 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-741 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-742 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-743 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-744 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-745 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-746 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-747 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-748 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-749 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-750 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-751 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-752 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-753 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-754 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-755 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-756 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-757 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-758 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-759 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-760 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-761 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-762 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-763 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-764 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-765 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-766 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-767 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-768 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-769 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-770 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-771 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-772 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-773 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-774 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-775 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-776 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-777 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-778 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-779 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-780 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-781 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-782 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-783 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-784 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-785 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-786 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-787 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-788 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-789 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-790 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-791 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-792 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-793 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-794 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-795 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-796 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-797 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-798 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-799 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-800 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-801 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-802 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-803 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-804 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-805 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-806 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-807 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-808 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-809 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-810 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-811 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-812 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-813 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-814 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-815 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-816 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-817 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-818 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-819 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-820 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-821 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-822 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-823 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-824 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-825 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-826 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-827 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-828 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-829 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-830 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-831 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-832 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-833 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-834 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-835 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-836 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-837 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-838 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-839 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-840 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-841 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-842 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-843 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-844 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-845 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-846 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-847 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-848 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-849 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-850 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-851 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-852 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-853 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-854 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-855 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-856 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-857 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-858 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-859 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-860 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-861 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-862 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-863 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-864 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-865 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-866 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-867 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-868 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-869 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-870 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-871 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-872 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-873 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-874 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-875 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-876 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-877 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-878 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-879 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-880 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-881 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-882 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-883 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-884 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-885 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-886 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-887 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-888 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+}
+do_execsql_test joinD-889 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-890 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-891 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-892 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-893 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-894 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-895 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-896 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-897 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-898 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-899 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b IS NOT DISTINCT FROM t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-900 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 RIGHT JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  - 203  3   -  -
+   -   -   -   -   -  - 209  9   -  -
+   -   -   -   -   -  - 215 15   -  -
+   -   -   -   -   -  - 221 21   -  -
+   -   -   -   -   -  - 227 27   -  -
+   -   -   -   -   -  - 233 33   -  -
+   -   -   -   -   -  - 239 39   -  -
+   -   -   -   -   -  - 245 45   -  -
+   -   -   -   -   -  - 251 51   -  -
+   -   -   -   -   -  - 257 57   -  -
+   -   -   -   -   -  - 263 63   -  -
+   -   -   -   -   -  - 269 69   -  -
+   -   -   -   -   -  - 275 75   -  -
+   -   -   -   -   -  - 281 81   -  -
+   -   -   -   -   -  - 287 87   -  -
+   -   -   -   -   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 315 15
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 345 45
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 375 75
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-901 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-902 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-903 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-904 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-905 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-906 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-907 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-908 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-909 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-910 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-911 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-912 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-913 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-914 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-915 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-916 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-917 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-918 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-919 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-920 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-921 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-922 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-923 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-924 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-925 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-926 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-927 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-928 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-929 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-930 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-931 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-932 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-933 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-934 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-935 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-936 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-937 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-938 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-939 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-940 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-941 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-942 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-943 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-944 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-945 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-946 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-947 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-948 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-949 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-950 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-951 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-952 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-953 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-954 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-955 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-956 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-957 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-958 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-959 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-960 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-961 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-962 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-963 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  INNER JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-964 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-965 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-966 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-967 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  INNER JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-968 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  INNER JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-969 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-970 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-971 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-972 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-973 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-974 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-975 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-976 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-977 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-978 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-979 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-980 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-981 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-982 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-983 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-984 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-985 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-986 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-987 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-988 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+}
+do_execsql_test joinD-989 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-990 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-991 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-992 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-993 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-994 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-995 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-996 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-997 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-998 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-999 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-1000 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1001 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1002 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-1003 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1004 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1005 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1006 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1007 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1008 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1009 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1010 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1011 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1012 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1013 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1014 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1015 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1016 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1017 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1018 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1019 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1020 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1021 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-1022 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1023 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-1024 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-1025 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1026 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1027 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+}
+do_execsql_test joinD-1028 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1029 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1030 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1031 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  LEFT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1032 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1033 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
+}
+do_execsql_test joinD-1034 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1035 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  LEFT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1036 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  LEFT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
+   6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
+  12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
+  30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
+  36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
+  42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
+  60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
+  66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
+  72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1037 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1038 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1039 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1040 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1041 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1042 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1043 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1044 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1045 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1046 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1047 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1048 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1049 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1050 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1051 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1052 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1053 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1054 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-1055 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1056 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-1057 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1058 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-1059 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-1060 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1061 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-1062 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1063 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1064 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1065 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1066 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-1067 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1068 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1069 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1070 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+}
+do_execsql_test joinD-1071 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1072 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1073 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1074 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1075 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1076 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1077 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1078 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1079 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1080 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1081 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1082 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1083 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1084 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1085 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1086 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1087 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1088 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1089 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1090 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1091 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1092 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+}
+do_execsql_test joinD-1093 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1094 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1095 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1096 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
   RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1097 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1098 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1099 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  RIGHT JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1100 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1101 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1102 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c IS NOT DISTINCT FROM t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1103 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  RIGHT JOIN t3 ON t1.c IS NOT DISTINCT FROM t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1104 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  RIGHT JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0
   FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
+  15 115 215 315   -  - 215 15 315 15
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
+  30 130 230 330 130 30 230 30 330 30
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
+  45 145 245 345   -  - 245 45 345 45
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
+  60 160 260 360 160 60 260 60 360 60
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
+  75 175 275 375   -  - 275 75 375 75
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
+  90 190 290 390 190 90 290 90 390 90
+  93 193 293 393   -  - 293 93   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
+   -   -   -   -   -  -   -  - 305  5
+   -   -   -   -   -  -   -  - 310 10
+   -   -   -   -   -  -   -  - 320 20
+   -   -   -   -   -  -   -  - 325 25
+   -   -   -   -   -  -   -  - 335 35
+   -   -   -   -   -  -   -  - 340 40
+   -   -   -   -   -  -   -  - 350 50
+   -   -   -   -   -  -   -  - 355 55
+   -   -   -   -   -  -   -  - 365 65
+   -   -   -   -   -  -   -  - 370 70
+   -   -   -   -   -  -   -  - 380 80
+   -   -   -   -   -  -   -  - 385 85
+   -   -   -   -   -  -   -  - 395 95
+}
+do_execsql_test joinD-1105 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1106 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1107 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1108 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1109 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1110 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1111 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
+  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-13 {
+do_execsql_test joinD-1112 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1113 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
   FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1114 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1115 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
   INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1116 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  INNER JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1117 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   5 105 205 305   -  -   -  - 305  5
   10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
   20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
   40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
   50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
   70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
   80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-14 {
+do_execsql_test joinD-1118 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1119 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  INNER JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1120 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  INNER JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1121 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
   FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
   LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
    4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
    8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
   10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
   14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
   16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
   20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
   22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
   26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
   28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
   32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
   34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
   38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
   40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
   44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
   46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
   50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
   52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
   56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
   58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
   62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
   64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
   68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
   70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
   74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
   76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
   80 180 280 380 180 80   -  - 380 80
-  82 182 282 382 182 82   -  -   -  -
-  84 184 284 384 184 84 284 84   -  -
-  86 186 286 386 186 86   -  -   -  -
-  88 188 288 388 188 88   -  -   -  -
-  90 190 290 390 190 90 290 90 390 90
-  92 192 292 392 192 92   -  -   -  -
-  94 194 294 394 194 94   -  -   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
-}
-do_execsql_test joinD-15 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  10 110 210 310 110 10   -  - 310 10
-  20 120 220 320 120 20   -  - 320 20
-  30 130 230 330 130 30 230 30 330 30
-  40 140 240 340 140 40   -  - 340 40
-  50 150 250 350 150 50   -  - 350 50
-  60 160 260 360 160 60 260 60 360 60
-  70 170 270 370 170 70   -  - 370 70
-  80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-16 {
+do_execsql_test joinD-1122 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
   FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    2 102 202 302 102  2   -  -   -  -
@@ -627,204 +32812,220 @@ do_execsql_test joinD-16 {
   90 190 290 390 190 90 290 90 390 90
   92 192 292 392 192 92   -  -   -  -
   94 194 294 394 194 94   -  -   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-17 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  15 115 215 315   -  - 215 15 315 15
-  30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
-  60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
-}
-do_execsql_test joinD-18 {
+do_execsql_test joinD-1123 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
   LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
    9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
   15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
   21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
   27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
   33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
   39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
   45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
   51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
   57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
   63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
   69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
   75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
   81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
   87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
   93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-19 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  15 115 215 315   -  - 215 15 315 15
-  30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
-  60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
-}
-do_execsql_test joinD-20 {
+do_execsql_test joinD-1124 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   3 103 203 303   -  - 203  3   -  -
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
    6 106 206 306 106  6 206  6   -  -
-   9 109 209 309   -  - 209  9   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
   12 112 212 312 112 12 212 12   -  -
-  15 115 215 315   -  - 215 15 315 15
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
-  21 121 221 321   -  - 221 21   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
-  27 127 227 327   -  - 227 27   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  33 133 233 333   -  - 233 33   -  -
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
   36 136 236 336 136 36 236 36   -  -
-  39 139 239 339   -  - 239 39   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
   42 142 242 342 142 42 242 42   -  -
-  45 145 245 345   -  - 245 45 345 45
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
-  51 151 251 351   -  - 251 51   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
-  57 157 257 357   -  - 257 57   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  63 163 263 363   -  - 263 63   -  -
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
   66 166 266 366 166 66 266 66   -  -
-  69 169 269 369   -  - 269 69   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
   72 172 272 372 172 72 272 72   -  -
-  75 175 275 375   -  - 275 75 375 75
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
-  81 181 281 381   -  - 281 81   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
-  87 187 287 387   -  - 287 87   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
 }
-do_execsql_test joinD-21 {
+do_execsql_test joinD-1125 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
+} {
+   3 103 203 303   -  - 203  3   -  -
+   6 106 206 306 106  6 206  6   -  -
+   9 109 209 309   -  - 209  9   -  -
+  12 112 212 312 112 12 212 12   -  -
   15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
+  18 118 218 318 118 18 218 18   -  -
+  21 121 221 321   -  - 221 21   -  -
+  24 124 224 324 124 24 224 24   -  -
+  27 127 227 327   -  - 227 27   -  -
   30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
+  33 133 233 333   -  - 233 33   -  -
+  36 136 236 336 136 36 236 36   -  -
+  39 139 239 339   -  - 239 39   -  -
+  42 142 242 342 142 42 242 42   -  -
   45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
+  48 148 248 348 148 48 248 48   -  -
+  51 151 251 351   -  - 251 51   -  -
+  54 154 254 354 154 54 254 54   -  -
+  57 157 257 357   -  - 257 57   -  -
   60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
+  63 163 263 363   -  - 263 63   -  -
+  66 166 266 366 166 66 266 66   -  -
+  69 169 269 369   -  - 269 69   -  -
+  72 172 272 372 172 72 272 72   -  -
   75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
+  78 178 278 378 178 78 278 78   -  -
+  81 181 281 381   -  - 281 81   -  -
+  84 184 284 384 184 84 284 84   -  -
+  87 187 287 387   -  - 287 87   -  -
   90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
+  93 193 293 393   -  - 293 93   -  -
 }
-do_execsql_test joinD-22 {
+do_execsql_test joinD-1126 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
   LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
    1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
@@ -924,12 +33125,14 @@ do_execsql_test joinD-22 {
   97 197   - 397   -  -   -  -   -  -
   98 198 298   -   -  -   -  -   -  -
   99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
 }
-do_execsql_test joinD-23 {
+do_execsql_test joinD-1127 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    5 105 205 305   -  -   -  - 305  5
@@ -951,16 +33154,15 @@ do_execsql_test joinD-23 {
   85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
   95 195 295 395   -  -   -  - 395 95
-   -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-24 {
+do_execsql_test joinD-1128 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
    1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
@@ -1060,67 +33262,33 @@ do_execsql_test joinD-24 {
   97 197   - 397   -  -   -  -   -  -
   98 198 298   -   -  -   -  -   -  -
   99   -   -   -   -  -   -  -   -  -
-   -   -   -   -   -  -   -  - 300  0
-}
-do_execsql_test joinD-25 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  15 115 215 315   -  - 215 15 315 15
-  30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
-  60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
+   -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-26 {
+do_execsql_test joinD-1129 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   3 103 203 303   -  - 203  3   -  -
-   6 106 206 306 106  6 206  6   -  -
-   9 109 209 309   -  - 209  9   -  -
-  12 112 212 312 112 12 212 12   -  -
-  15 115 215 315   -  - 215 15 315 15
-  18 118 218 318 118 18 218 18   -  -
-  21 121 221 321   -  - 221 21   -  -
-  24 124 224 324 124 24 224 24   -  -
-  27 127 227 327   -  - 227 27   -  -
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
   30 130 230 330 130 30 230 30 330 30
-  33 133 233 333   -  - 233 33   -  -
-  36 136 236 336 136 36 236 36   -  -
-  39 139 239 339   -  - 239 39   -  -
-  42 142 242 342 142 42 242 42   -  -
-  45 145 245 345   -  - 245 45 345 45
-  48 148 248 348 148 48 248 48   -  -
-  51 151 251 351   -  - 251 51   -  -
-  54 154 254 354 154 54 254 54   -  -
-  57 157 257 357   -  - 257 57   -  -
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
   60 160 260 360 160 60 260 60 360 60
-  63 163 263 363   -  - 263 63   -  -
-  66 166 266 366 166 66 266 66   -  -
-  69 169 269 369   -  - 269 69   -  -
-  72 172 272 372 172 72 272 72   -  -
-  75 175 275 375   -  - 275 75 375 75
-  78 178 278 378 178 78 278 78   -  -
-  81 181 281 381   -  - 281 81   -  -
-  84 184 284 384 184 84 284 84   -  -
-  87 187 287 387   -  - 287 87   -  -
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
-  93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-27 {
+do_execsql_test joinD-1130 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   15 115 215 315   -  - 215 15 315 15
@@ -1129,107 +33297,48 @@ do_execsql_test joinD-27 {
   60 160 260 360 160 60 260 60 360 60
   75 175 275 375   -  - 275 75 375 75
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-28 {
+do_execsql_test joinD-1131 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   3 103 203 303   -  - 203  3   -  -
    6 106 206 306 106  6 206  6   -  -
-   9 109 209 309   -  - 209  9   -  -
   12 112 212 312 112 12 212 12   -  -
-  15 115 215 315   -  - 215 15 315 15
   18 118 218 318 118 18 218 18   -  -
-  21 121 221 321   -  - 221 21   -  -
   24 124 224 324 124 24 224 24   -  -
-  27 127 227 327   -  - 227 27   -  -
   30 130 230 330 130 30 230 30 330 30
-  33 133 233 333   -  - 233 33   -  -
   36 136 236 336 136 36 236 36   -  -
-  39 139 239 339   -  - 239 39   -  -
   42 142 242 342 142 42 242 42   -  -
-  45 145 245 345   -  - 245 45 345 45
   48 148 248 348 148 48 248 48   -  -
-  51 151 251 351   -  - 251 51   -  -
   54 154 254 354 154 54 254 54   -  -
-  57 157 257 357   -  - 257 57   -  -
   60 160 260 360 160 60 260 60 360 60
-  63 163 263 363   -  - 263 63   -  -
   66 166 266 366 166 66 266 66   -  -
-  69 169 269 369   -  - 269 69   -  -
   72 172 272 372 172 72 272 72   -  -
-  75 175 275 375   -  - 275 75 375 75
   78 178 278 378 178 78 278 78   -  -
-  81 181 281 381   -  - 281 81   -  -
   84 184 284 384 184 84 284 84   -  -
-  87 187 287 387   -  - 287 87   -  -
   90 190 290 390 190 90 290 90 390 90
-  93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-29 {
+do_execsql_test joinD-1132 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  LEFT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
-  15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
-  45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
-  75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-30 {
+do_execsql_test joinD-1133 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    0 100 200 300   -  -   -  -   -  -
@@ -1332,162 +33441,71 @@ do_execsql_test joinD-30 {
   97 197   - 397   -  -   -  -   -  -
   98 198 298   -   -  -   -  -   -  -
   99   -   -   -   -  -   -  -   -  -
+   -   -   -   - 100  0   -  -   -  -
    -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-31 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
-  15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
-  30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
-  45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
-  60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
-  75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
-  90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
-   -   -   -   -   -  -   -  - 300  0
-}
-do_execsql_test joinD-32 {
+do_execsql_test joinD-1134 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 LEFT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
-   1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
-   3 103 203 303   -  - 203  3   -  -
    4 104 204 304 104  4   -  -   -  -
-   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
-   7 107 207 307   -  -   -  -   -  -
    8 108 208 308 108  8   -  -   -  -
-   9 109 209 309   -  - 209  9   -  -
   10 110 210 310 110 10   -  - 310 10
-  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
-  13 113 213 313   -  -   -  -   -  -
   14 114 214 314 114 14   -  -   -  -
-  15 115 215 315   -  - 215 15 315 15
   16 116 216 316 116 16   -  -   -  -
-  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
-  19 119 219 319   -  -   -  -   -  -
   20 120 220 320 120 20   -  - 320 20
-  21 121 221 321   -  - 221 21   -  -
   22 122 222 322 122 22   -  -   -  -
-  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
-  25 125 225 325   -  -   -  - 325 25
   26 126 226 326 126 26   -  -   -  -
-  27 127 227 327   -  - 227 27   -  -
   28 128 228 328 128 28   -  -   -  -
-  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  31 131 231 331   -  -   -  -   -  -
   32 132 232 332 132 32   -  -   -  -
-  33 133 233 333   -  - 233 33   -  -
   34 134 234 334 134 34   -  -   -  -
-  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
-  37 137 237 337   -  -   -  -   -  -
   38 138 238 338 138 38   -  -   -  -
-  39 139 239 339   -  - 239 39   -  -
   40 140 240 340 140 40   -  - 340 40
-  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
-  43 143 243 343   -  -   -  -   -  -
   44 144 244 344 144 44   -  -   -  -
-  45 145 245 345   -  - 245 45 345 45
   46 146 246 346 146 46   -  -   -  -
-  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
-  49 149 249 349   -  -   -  -   -  -
   50 150 250 350 150 50   -  - 350 50
-  51 151 251 351   -  - 251 51   -  -
   52 152 252 352 152 52   -  -   -  -
-  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
-  55 155 255 355   -  -   -  - 355 55
   56 156 256 356 156 56   -  -   -  -
-  57 157 257 357   -  - 257 57   -  -
   58 158 258 358 158 58   -  -   -  -
-  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  61 161 261 361   -  -   -  -   -  -
   62 162 262 362 162 62   -  -   -  -
-  63 163 263 363   -  - 263 63   -  -
   64 164 264 364 164 64   -  -   -  -
-  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
-  67 167 267 367   -  -   -  -   -  -
   68 168 268 368 168 68   -  -   -  -
-  69 169 269 369   -  - 269 69   -  -
   70 170 270 370 170 70   -  - 370 70
-  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
-  73 173 273 373   -  -   -  -   -  -
   74 174 274 374 174 74   -  -   -  -
-  75 175 275 375   -  - 275 75 375 75
   76 176 276 376 176 76   -  -   -  -
-  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
-  79 179 279 379   -  -   -  -   -  -
   80 180 280 380 180 80   -  - 380 80
-  81 181 281 381   -  - 281 81   -  -
   82 182 282 382 182 82   -  -   -  -
-  83 183 283 383   -  -   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
-  85 185 285 385   -  -   -  - 385 85
   86 186 286 386 186 86   -  -   -  -
-  87 187 287 387   -  - 287 87   -  -
   88 188 288 388 188 88   -  -   -  -
-  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  91 191 291 391   -  -   -  -   -  -
   92 192 292 392 192 92   -  -   -  -
-  93 193 293 393   -  - 293 93   -  -
   94 194 294 394 194 94   -  -   -  -
-  95 195 295 395   -  -   -  - 395 95
-  96   - 296 396   -  -   -  -   -  -
-  97 197   - 397   -  -   -  -   -  -
-  98 198 298   -   -  -   -  -   -  -
-  99   -   -   -   -  -   -  -   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  -   -  - 300  0
-}
-do_execsql_test joinD-33 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  30 130 230 330 130 30 230 30 330 30
-  60 160 260 360 160 60 260 60 360 60
-  90 190 290 390 190 90 290 90 390 90
 }
-do_execsql_test joinD-34 {
+do_execsql_test joinD-1135 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  LEFT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c = t3.c
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    6 106 206 306 106  6 206  6   -  -
@@ -1506,383 +33524,308 @@ do_execsql_test joinD-34 {
   84 184 284 384 184 84 284 84   -  -
   90 190 290 390 190 90 290 90 390 90
 }
-do_execsql_test joinD-35 {
+do_execsql_test joinD-1136 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  LEFT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1137 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
   RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
    -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-36 {
+do_execsql_test joinD-1138 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-37 {
+do_execsql_test joinD-1139 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   5 105 205 305   -  -   -  - 305  5
   10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
   20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
   40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
   50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
   70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
   80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-38 {
+do_execsql_test joinD-1140 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   2 102 202 302 102  2   -  -   -  -
-   4 104 204 304 104  4   -  -   -  -
-   6 106 206 306 106  6 206  6   -  -
-   8 108 208 308 108  8   -  -   -  -
   10 110 210 310 110 10   -  - 310 10
-  12 112 212 312 112 12 212 12   -  -
-  14 114 214 314 114 14   -  -   -  -
-  16 116 216 316 116 16   -  -   -  -
-  18 118 218 318 118 18 218 18   -  -
   20 120 220 320 120 20   -  - 320 20
-  22 122 222 322 122 22   -  -   -  -
-  24 124 224 324 124 24 224 24   -  -
-  26 126 226 326 126 26   -  -   -  -
-  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  32 132 232 332 132 32   -  -   -  -
-  34 134 234 334 134 34   -  -   -  -
-  36 136 236 336 136 36 236 36   -  -
-  38 138 238 338 138 38   -  -   -  -
   40 140 240 340 140 40   -  - 340 40
-  42 142 242 342 142 42 242 42   -  -
-  44 144 244 344 144 44   -  -   -  -
-  46 146 246 346 146 46   -  -   -  -
-  48 148 248 348 148 48 248 48   -  -
   50 150 250 350 150 50   -  - 350 50
-  52 152 252 352 152 52   -  -   -  -
-  54 154 254 354 154 54 254 54   -  -
-  56 156 256 356 156 56   -  -   -  -
-  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  62 162 262 362 162 62   -  -   -  -
-  64 164 264 364 164 64   -  -   -  -
-  66 166 266 366 166 66 266 66   -  -
-  68 168 268 368 168 68   -  -   -  -
   70 170 270 370 170 70   -  - 370 70
-  72 172 272 372 172 72 272 72   -  -
-  74 174 274 374 174 74   -  -   -  -
-  76 176 276 376 176 76   -  -   -  -
-  78 178 278 378 178 78 278 78   -  -
   80 180 280 380 180 80   -  - 380 80
-  82 182 282 382 182 82   -  -   -  -
-  84 184 284 384 184 84 284 84   -  -
-  86 186 286 386 186 86   -  -   -  -
-  88 188 288 388 188 88   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  92 192 292 392 192 92   -  -   -  -
-  94 194 294 394 194 94   -  -   -  -
-   -   -   -   - 100  0   -  -   -  -
 }
-do_execsql_test joinD-39 {
+do_execsql_test joinD-1141 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  15 115 215 315   -  - 215 15 315 15
+  30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
+  60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1142 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
   RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+   -   -   -   -   -  -   -  - 300  0
+}
+do_execsql_test joinD-1143 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
+  30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
+  60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
+  90 190 290 390 190 90 290 90 390 90
+  95 195 295 395   -  -   -  - 395 95
+}
+do_execsql_test joinD-1144 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   5 105 205 305   -  -   -  - 305  5
   10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
   20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
+  35 135 235 335   -  -   -  - 335 35
   40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
   50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
+  65 165 265 365   -  -   -  - 365 65
   70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
   80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
+  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-40 {
+do_execsql_test joinD-1145 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   2 102 202 302 102  2   -  -   -  -
-   4 104 204 304 104  4   -  -   -  -
-   6 106 206 306 106  6 206  6   -  -
-   8 108 208 308 108  8   -  -   -  -
   10 110 210 310 110 10   -  - 310 10
-  12 112 212 312 112 12 212 12   -  -
-  14 114 214 314 114 14   -  -   -  -
-  16 116 216 316 116 16   -  -   -  -
-  18 118 218 318 118 18 218 18   -  -
   20 120 220 320 120 20   -  - 320 20
-  22 122 222 322 122 22   -  -   -  -
-  24 124 224 324 124 24 224 24   -  -
-  26 126 226 326 126 26   -  -   -  -
-  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  32 132 232 332 132 32   -  -   -  -
-  34 134 234 334 134 34   -  -   -  -
-  36 136 236 336 136 36 236 36   -  -
-  38 138 238 338 138 38   -  -   -  -
   40 140 240 340 140 40   -  - 340 40
-  42 142 242 342 142 42 242 42   -  -
-  44 144 244 344 144 44   -  -   -  -
-  46 146 246 346 146 46   -  -   -  -
-  48 148 248 348 148 48 248 48   -  -
   50 150 250 350 150 50   -  - 350 50
-  52 152 252 352 152 52   -  -   -  -
-  54 154 254 354 154 54 254 54   -  -
-  56 156 256 356 156 56   -  -   -  -
-  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  62 162 262 362 162 62   -  -   -  -
-  64 164 264 364 164 64   -  -   -  -
-  66 166 266 366 166 66 266 66   -  -
-  68 168 268 368 168 68   -  -   -  -
   70 170 270 370 170 70   -  - 370 70
-  72 172 272 372 172 72 272 72   -  -
-  74 174 274 374 174 74   -  -   -  -
-  76 176 276 376 176 76   -  -   -  -
-  78 178 278 378 178 78 278 78   -  -
   80 180 280 380 180 80   -  - 380 80
-  82 182 282 382 182 82   -  -   -  -
-  84 184 284 384 184 84 284 84   -  -
-  86 186 286 386 186 86   -  -   -  -
-  88 188 288 388 188 88   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  92 192 292 392 192 92   -  -   -  -
-  94 194 294 394 194 94   -  -   -  -
-   -   -   -   - 100  0   -  -   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-41 {
+do_execsql_test joinD-1146 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+  15 115 215 315   -  - 215 15 315 15
   30 130 230 330 130 30 230 30 330 30
+  45 145 245 345   -  - 245 45 345 45
   60 160 260 360 160 60 260 60 360 60
+  75 175 275 375   -  - 275 75 375 75
   90 190 290 390 190 90 290 90 390 90
 }
-do_execsql_test joinD-42 {
+do_execsql_test joinD-1147 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
 }
-do_execsql_test joinD-43 {
+do_execsql_test joinD-1148 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  RIGHT JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   30 130 230 330 130 30 230 30 330 30
   60 160 260 360 160 60 260 60 360 60
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-44 {
+do_execsql_test joinD-1149 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   6 106 206 306 106  6 206  6   -  -
-  12 112 212 312 112 12 212 12   -  -
-  18 118 218 318 118 18 218 18   -  -
-  24 124 224 324 124 24 224 24   -  -
+   5 105 205 305   -  -   -  - 305  5
+  10 110 210 310 110 10   -  - 310 10
+  15 115 215 315   -  - 215 15 315 15
+  20 120 220 320 120 20   -  - 320 20
+  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
-  36 136 236 336 136 36 236 36   -  -
-  42 142 242 342 142 42 242 42   -  -
-  48 148 248 348 148 48 248 48   -  -
-  54 154 254 354 154 54 254 54   -  -
+  35 135 235 335   -  -   -  - 335 35
+  40 140 240 340 140 40   -  - 340 40
+  45 145 245 345   -  - 245 45 345 45
+  50 150 250 350 150 50   -  - 350 50
+  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
-  66 166 266 366 166 66 266 66   -  -
-  72 172 272 372 172 72 272 72   -  -
-  78 178 278 378 178 78 278 78   -  -
-  84 184 284 384 184 84 284 84   -  -
+  65 165 265 365   -  -   -  - 365 65
+  70 170 270 370 170 70   -  - 370 70
+  75 175 275 375   -  - 275 75 375 75
+  80 180 280 380 180 80   -  - 380 80
+  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
+  95 195 295 395   -  -   -  - 395 95
    -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-45 {
+do_execsql_test joinD-1150 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   10 110 210 310 110 10   -  - 310 10
@@ -1895,112 +33838,153 @@ do_execsql_test joinD-45 {
   80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
 }
-do_execsql_test joinD-46 {
+do_execsql_test joinD-1151 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  RIGHT JOIN t4 ON t1.d IS NOT DISTINCT FROM t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  30 130 230 330 130 30 230 30 330 30
+  60 160 260 360 160 60 260 60 360 60
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1152 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  RIGHT JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d IS NOT DISTINCT FROM t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1153 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
   FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   0 100 200 300   -  -   -  -   -  -
+   1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
+   3 103 203 303   -  - 203  3   -  -
    4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
    8 108 208 308 108  8   -  -   -  -
+   9 109 209 309   -  - 209  9   -  -
   10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
   14 114 214 314 114 14   -  -   -  -
+  15 115 215 315   -  - 215 15 315 15
   16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
   20 120 220 320 120 20   -  - 320 20
+  21 121 221 321   -  - 221 21   -  -
   22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
   26 126 226 326 126 26   -  -   -  -
+  27 127 227 327   -  - 227 27   -  -
   28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
   32 132 232 332 132 32   -  -   -  -
+  33 133 233 333   -  - 233 33   -  -
   34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
   38 138 238 338 138 38   -  -   -  -
+  39 139 239 339   -  - 239 39   -  -
   40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
   44 144 244 344 144 44   -  -   -  -
+  45 145 245 345   -  - 245 45 345 45
   46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
   50 150 250 350 150 50   -  - 350 50
+  51 151 251 351   -  - 251 51   -  -
   52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
   56 156 256 356 156 56   -  -   -  -
+  57 157 257 357   -  - 257 57   -  -
   58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
   62 162 262 362 162 62   -  -   -  -
+  63 163 263 363   -  - 263 63   -  -
   64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
   68 168 268 368 168 68   -  -   -  -
+  69 169 269 369   -  - 269 69   -  -
   70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
   74 174 274 374 174 74   -  -   -  -
+  75 175 275 375   -  - 275 75 375 75
   76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
   80 180 280 380 180 80   -  - 380 80
+  81 181 281 381   -  - 281 81   -  -
   82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
   86 186 286 386 186 86   -  -   -  -
+  87 187 287 387   -  - 287 87   -  -
   88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
   92 192 292 392 192 92   -  -   -  -
+  93 193 293 393   -  - 293 93   -  -
   94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
    -   -   -   - 100  0   -  -   -  -
    -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
-}
-do_execsql_test joinD-47 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  10 110 210 310 110 10   -  - 310 10
-  20 120 220 320 120 20   -  - 320 20
-  30 130 230 330 130 30 230 30 330 30
-  40 140 240 340 140 40   -  - 340 40
-  50 150 250 350 150 50   -  - 350 50
-  60 160 260 360 160 60 260 60 360 60
-  70 170 270 370 170 70   -  - 370 70
-  80 180 280 380 180 80   -  - 380 80
-  90 190 290 390 190 90 290 90 390 90
    -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-48 {
+do_execsql_test joinD-1154 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 RIGHT JOIN t2 ON t1.b=t2.b AND t2.x>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
   FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
   FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    2 102 202 302 102  2   -  -   -  -
@@ -2050,122 +34034,179 @@ do_execsql_test joinD-48 {
   90 190 290 390 190 90 290 90 390 90
   92 192 292 392 192 92   -  -   -  -
   94 194 294 394 194 94   -  -   -  -
-   -   -   -   - 100  0   -  -   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  - 203  3   -  -
-   -   -   -   -   -  - 209  9   -  -
-   -   -   -   -   -  - 215 15   -  -
-   -   -   -   -   -  - 221 21   -  -
-   -   -   -   -   -  - 227 27   -  -
-   -   -   -   -   -  - 233 33   -  -
-   -   -   -   -   -  - 239 39   -  -
-   -   -   -   -   -  - 245 45   -  -
-   -   -   -   -   -  - 251 51   -  -
-   -   -   -   -   -  - 257 57   -  -
-   -   -   -   -   -  - 263 63   -  -
-   -   -   -   -   -  - 269 69   -  -
-   -   -   -   -   -  - 275 75   -  -
-   -   -   -   -   -  - 281 81   -  -
-   -   -   -   -   -  - 287 87   -  -
-   -   -   -   -   -  - 293 93   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 315 15
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 345 45
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 375 75
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
-}
-do_execsql_test joinD-49 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  15 115 215 315   -  - 215 15 315 15
-  30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
-  60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
 }
-do_execsql_test joinD-50 {
+do_execsql_test joinD-1155 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE (t2.x>0 OR t2.x IS NULL)
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
+   1 101 201 301   -  -   -  -   -  -
+   2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
+   4 104 204 304 104  4   -  -   -  -
+   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
+   7 107 207 307   -  -   -  -   -  -
+   8 108 208 308 108  8   -  -   -  -
    9 109 209 309   -  - 209  9   -  -
+  10 110 210 310 110 10   -  - 310 10
+  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
+  13 113 213 313   -  -   -  -   -  -
+  14 114 214 314 114 14   -  -   -  -
   15 115 215 315   -  - 215 15 315 15
+  16 116 216 316 116 16   -  -   -  -
+  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
+  19 119 219 319   -  -   -  -   -  -
+  20 120 220 320 120 20   -  - 320 20
   21 121 221 321   -  - 221 21   -  -
+  22 122 222 322 122 22   -  -   -  -
+  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
+  25 125 225 325   -  -   -  - 325 25
+  26 126 226 326 126 26   -  -   -  -
   27 127 227 327   -  - 227 27   -  -
+  28 128 228 328 128 28   -  -   -  -
+  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
+  31 131 231 331   -  -   -  -   -  -
+  32 132 232 332 132 32   -  -   -  -
   33 133 233 333   -  - 233 33   -  -
+  34 134 234 334 134 34   -  -   -  -
+  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
+  37 137 237 337   -  -   -  -   -  -
+  38 138 238 338 138 38   -  -   -  -
   39 139 239 339   -  - 239 39   -  -
+  40 140 240 340 140 40   -  - 340 40
+  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
+  43 143 243 343   -  -   -  -   -  -
+  44 144 244 344 144 44   -  -   -  -
   45 145 245 345   -  - 245 45 345 45
+  46 146 246 346 146 46   -  -   -  -
+  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
+  49 149 249 349   -  -   -  -   -  -
+  50 150 250 350 150 50   -  - 350 50
   51 151 251 351   -  - 251 51   -  -
+  52 152 252 352 152 52   -  -   -  -
+  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
+  55 155 255 355   -  -   -  - 355 55
+  56 156 256 356 156 56   -  -   -  -
   57 157 257 357   -  - 257 57   -  -
+  58 158 258 358 158 58   -  -   -  -
+  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
+  61 161 261 361   -  -   -  -   -  -
+  62 162 262 362 162 62   -  -   -  -
   63 163 263 363   -  - 263 63   -  -
+  64 164 264 364 164 64   -  -   -  -
+  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
+  67 167 267 367   -  -   -  -   -  -
+  68 168 268 368 168 68   -  -   -  -
   69 169 269 369   -  - 269 69   -  -
+  70 170 270 370 170 70   -  - 370 70
+  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
+  73 173 273 373   -  -   -  -   -  -
+  74 174 274 374 174 74   -  -   -  -
   75 175 275 375   -  - 275 75 375 75
+  76 176 276 376 176 76   -  -   -  -
+  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
+  79 179 279 379   -  -   -  -   -  -
+  80 180 280 380 180 80   -  - 380 80
   81 181 281 381   -  - 281 81   -  -
+  82 182 282 382 182 82   -  -   -  -
+  83 183 283 383   -  -   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
+  85 185 285 385   -  -   -  - 385 85
+  86 186 286 386 186 86   -  -   -  -
   87 187 287 387   -  - 287 87   -  -
+  88 188 288 388 188 88   -  -   -  -
+  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
+  91 191 291 391   -  -   -  -   -  -
+  92 192 292 392 192 92   -  -   -  -
   93 193 293 393   -  - 293 93   -  -
+  94 194 294 394 194 94   -  -   -  -
+  95 195 295 395   -  -   -  - 395 95
+  96   - 296 396   -  -   -  -   -  -
+  97 197   - 397   -  -   -  -   -  -
+  98 198 298   -   -  -   -  -   -  -
+  99   -   -   -   -  -   -  -   -  -
+   -   -   -   -   -  - 200  0   -  -
+   -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-51 {
+do_execsql_test joinD-1156 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON true
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t1.b=t2.b AND t2.x>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-  15 115 215 315   -  - 215 15 315 15
+   2 102 202 302 102  2   -  -   -  -
+   4 104 204 304 104  4   -  -   -  -
+   6 106 206 306 106  6 206  6   -  -
+   8 108 208 308 108  8   -  -   -  -
+  10 110 210 310 110 10   -  - 310 10
+  12 112 212 312 112 12 212 12   -  -
+  14 114 214 314 114 14   -  -   -  -
+  16 116 216 316 116 16   -  -   -  -
+  18 118 218 318 118 18 218 18   -  -
+  20 120 220 320 120 20   -  - 320 20
+  22 122 222 322 122 22   -  -   -  -
+  24 124 224 324 124 24 224 24   -  -
+  26 126 226 326 126 26   -  -   -  -
+  28 128 228 328 128 28   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
+  32 132 232 332 132 32   -  -   -  -
+  34 134 234 334 134 34   -  -   -  -
+  36 136 236 336 136 36 236 36   -  -
+  38 138 238 338 138 38   -  -   -  -
+  40 140 240 340 140 40   -  - 340 40
+  42 142 242 342 142 42 242 42   -  -
+  44 144 244 344 144 44   -  -   -  -
+  46 146 246 346 146 46   -  -   -  -
+  48 148 248 348 148 48 248 48   -  -
+  50 150 250 350 150 50   -  - 350 50
+  52 152 252 352 152 52   -  -   -  -
+  54 154 254 354 154 54 254 54   -  -
+  56 156 256 356 156 56   -  -   -  -
+  58 158 258 358 158 58   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
+  62 162 262 362 162 62   -  -   -  -
+  64 164 264 364 164 64   -  -   -  -
+  66 166 266 366 166 66 266 66   -  -
+  68 168 268 368 168 68   -  -   -  -
+  70 170 270 370 170 70   -  - 370 70
+  72 172 272 372 172 72 272 72   -  -
+  74 174 274 374 174 74   -  -   -  -
+  76 176 276 376 176 76   -  -   -  -
+  78 178 278 378 178 78 278 78   -  -
+  80 180 280 380 180 80   -  - 380 80
+  82 182 282 382 182 82   -  -   -  -
+  84 184 284 384 184 84 284 84   -  -
+  86 186 286 386 186 86   -  -   -  -
+  88 188 288 388 188 88   -  -   -  -
+  90 190 290 390 190 90 290 90 390 90
+  92 192 292 392 192 92   -  -   -  -
+  94 194 294 394 194 94   -  -   -  -
 }
-do_execsql_test joinD-52 {
+do_execsql_test joinD-1157 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  INNER JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t3 ON t1.c=t3.c
   FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    3 103 203 303   -  - 203  3   -  -
@@ -2199,56 +34240,15 @@ do_execsql_test joinD-52 {
   87 187 287 387   -  - 287 87   -  -
   90 190 290 390 190 90 290 90 390 90
   93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
-}
-do_execsql_test joinD-53 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
-  15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
-  30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
-  45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
-  60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
-  75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
-  90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-54 {
+do_execsql_test joinD-1158 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t3.y>0 OR t3.y IS NULL
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
    1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
@@ -2349,12 +34349,14 @@ do_execsql_test joinD-54 {
   98 198 298   -   -  -   -  -   -  -
   99   -   -   -   -  -   -  -   -  -
    -   -   -   - 100  0   -  -   -  -
+   -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-55 {
+do_execsql_test joinD-1159 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    5 105 205 305   -  -   -  - 305  5
@@ -2376,16 +34378,15 @@ do_execsql_test joinD-55 {
   85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
   95 195 295 395   -  -   -  - 395 95
-   -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-56 {
+do_execsql_test joinD-1160 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  LEFT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z IS NULL OR t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
    1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
    3 103 203 303   -  - 203  3   -  -
@@ -2486,67 +34487,32 @@ do_execsql_test joinD-56 {
   98 198 298   -   -  -   -  -   -  -
   99   -   -   -   -  -   -  -   -  -
    -   -   -   - 100  0   -  -   -  -
-   -   -   -   -   -  -   -  - 300  0
-}
-do_execsql_test joinD-57 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-  15 115 215 315   -  - 215 15 315 15
-  30 130 230 330 130 30 230 30 330 30
-  45 145 245 345   -  - 245 45 345 45
-  60 160 260 360 160 60 260 60 360 60
-  75 175 275 375   -  - 275 75 375 75
-  90 190 290 390 190 90 290 90 390 90
+   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-58 {
+do_execsql_test joinD-1161 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   3 103 203 303   -  - 203  3   -  -
-   6 106 206 306 106  6 206  6   -  -
-   9 109 209 309   -  - 209  9   -  -
-  12 112 212 312 112 12 212 12   -  -
-  15 115 215 315   -  - 215 15 315 15
-  18 118 218 318 118 18 218 18   -  -
-  21 121 221 321   -  - 221 21   -  -
-  24 124 224 324 124 24 224 24   -  -
-  27 127 227 327   -  - 227 27   -  -
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
   30 130 230 330 130 30 230 30 330 30
-  33 133 233 333   -  - 233 33   -  -
-  36 136 236 336 136 36 236 36   -  -
-  39 139 239 339   -  - 239 39   -  -
-  42 142 242 342 142 42 242 42   -  -
-  45 145 245 345   -  - 245 45 345 45
-  48 148 248 348 148 48 248 48   -  -
-  51 151 251 351   -  - 251 51   -  -
-  54 154 254 354 154 54 254 54   -  -
-  57 157 257 357   -  - 257 57   -  -
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
   60 160 260 360 160 60 260 60 360 60
-  63 163 263 363   -  - 263 63   -  -
-  66 166 266 366 166 66 266 66   -  -
-  69 169 269 369   -  - 269 69   -  -
-  72 172 272 372 172 72 272 72   -  -
-  75 175 275 375   -  - 275 75 375 75
-  78 178 278 378 178 78 278 78   -  -
-  81 181 281 381   -  - 281 81   -  -
-  84 184 284 384 184 84 284 84   -  -
-  87 187 287 387   -  - 287 87   -  -
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
   90 190 290 390 190 90 290 90 390 90
-  93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  - 200  0   -  -
 }
-do_execsql_test joinD-59 {
+do_execsql_test joinD-1162 {
   SELECT t1.*, t2.*, t3.*, t4.*
   FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t4.z>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
   15 115 215 315   -  - 215 15 315 15
@@ -2555,107 +34521,48 @@ do_execsql_test joinD-59 {
   60 160 260 360 160 60 260 60 360 60
   75 175 275 375   -  - 275 75 375 75
   90 190 290 390 190 90 290 90 390 90
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-60 {
+do_execsql_test joinD-1163 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  RIGHT JOIN t3 ON t1.c=t3.c AND t3.y>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
   FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  WHERE t2.x>0 AND t3.y>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   3 103 203 303   -  - 203  3   -  -
    6 106 206 306 106  6 206  6   -  -
-   9 109 209 309   -  - 209  9   -  -
   12 112 212 312 112 12 212 12   -  -
-  15 115 215 315   -  - 215 15 315 15
   18 118 218 318 118 18 218 18   -  -
-  21 121 221 321   -  - 221 21   -  -
   24 124 224 324 124 24 224 24   -  -
-  27 127 227 327   -  - 227 27   -  -
   30 130 230 330 130 30 230 30 330 30
-  33 133 233 333   -  - 233 33   -  -
   36 136 236 336 136 36 236 36   -  -
-  39 139 239 339   -  - 239 39   -  -
   42 142 242 342 142 42 242 42   -  -
-  45 145 245 345   -  - 245 45 345 45
   48 148 248 348 148 48 248 48   -  -
-  51 151 251 351   -  - 251 51   -  -
   54 154 254 354 154 54 254 54   -  -
-  57 157 257 357   -  - 257 57   -  -
   60 160 260 360 160 60 260 60 360 60
-  63 163 263 363   -  - 263 63   -  -
   66 166 266 366 166 66 266 66   -  -
-  69 169 269 369   -  - 269 69   -  -
   72 172 272 372 172 72 272 72   -  -
-  75 175 275 375   -  - 275 75 375 75
   78 178 278 378 178 78 278 78   -  -
-  81 181 281 381   -  - 281 81   -  -
   84 184 284 384 184 84 284 84   -  -
-  87 187 287 387   -  - 287 87   -  -
   90 190 290 390 190 90 290 90 390 90
-  93 193 293 393   -  - 293 93   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  -   -  - 300  0
-   -   -   -   -   -  -   -  - 305  5
-   -   -   -   -   -  -   -  - 310 10
-   -   -   -   -   -  -   -  - 320 20
-   -   -   -   -   -  -   -  - 325 25
-   -   -   -   -   -  -   -  - 335 35
-   -   -   -   -   -  -   -  - 340 40
-   -   -   -   -   -  -   -  - 350 50
-   -   -   -   -   -  -   -  - 355 55
-   -   -   -   -   -  -   -  - 365 65
-   -   -   -   -   -  -   -  - 370 70
-   -   -   -   -   -  -   -  - 380 80
-   -   -   -   -   -  -   -  - 385 85
-   -   -   -   -   -  -   -  - 395 95
 }
-do_execsql_test joinD-61 {
+do_execsql_test joinD-1164 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  INNER JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b=t2.b
+  FULL JOIN t3 ON t1.c=t3.c
+  FULL JOIN t4 ON t1.d=t4.d
+  WHERE t2.x>0 AND t3.y>0 AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
-  15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
   30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
-  45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
   60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
-  75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
   90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
 }
-do_execsql_test joinD-62 {
+do_execsql_test joinD-1165 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  LEFT JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t1.b = t2.b AND t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
    0 100 200 300   -  -   -  -   -  -
@@ -2760,151 +34667,109 @@ do_execsql_test joinD-62 {
   99   -   -   -   -  -   -  -   -  -
    -   -   -   - 100  0   -  -   -  -
    -   -   -   -   -  - 200  0   -  -
-}
-do_execsql_test joinD-63 {
-  SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  RIGHT JOIN t4 ON t1.d=t4.d AND t4.z>0
-  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
-} {
-   5 105 205 305   -  -   -  - 305  5
-  10 110 210 310 110 10   -  - 310 10
-  15 115 215 315   -  - 215 15 315 15
-  20 120 220 320 120 20   -  - 320 20
-  25 125 225 325   -  -   -  - 325 25
-  30 130 230 330 130 30 230 30 330 30
-  35 135 235 335   -  -   -  - 335 35
-  40 140 240 340 140 40   -  - 340 40
-  45 145 245 345   -  - 245 45 345 45
-  50 150 250 350 150 50   -  - 350 50
-  55 155 255 355   -  -   -  - 355 55
-  60 160 260 360 160 60 260 60 360 60
-  65 165 265 365   -  -   -  - 365 65
-  70 170 270 370 170 70   -  - 370 70
-  75 175 275 375   -  - 275 75 375 75
-  80 180 280 380 180 80   -  - 380 80
-  85 185 285 385   -  -   -  - 385 85
-  90 190 290 390 190 90 290 90 390 90
-  95 195 295 395   -  -   -  - 395 95
    -   -   -   -   -  -   -  - 300  0
 }
-do_execsql_test joinD-64 {
+do_execsql_test joinD-1166 {
   SELECT t1.*, t2.*, t3.*, t4.*
-  FROM t1 FULL JOIN t2 ON t1.b=t2.b AND t2.x>0
-  FULL JOIN t3 ON t1.c=t3.c AND t3.y>0
-  FULL JOIN t4 ON t1.d=t4.d AND t4.z>0
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b
   ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
 } {
-   0 100 200 300   -  -   -  -   -  -
-   1 101 201 301   -  -   -  -   -  -
    2 102 202 302 102  2   -  -   -  -
-   3 103 203 303   -  - 203  3   -  -
    4 104 204 304 104  4   -  -   -  -
-   5 105 205 305   -  -   -  - 305  5
    6 106 206 306 106  6 206  6   -  -
-   7 107 207 307   -  -   -  -   -  -
    8 108 208 308 108  8   -  -   -  -
-   9 109 209 309   -  - 209  9   -  -
   10 110 210 310 110 10   -  - 310 10
-  11 111 211 311   -  -   -  -   -  -
   12 112 212 312 112 12 212 12   -  -
-  13 113 213 313   -  -   -  -   -  -
   14 114 214 314 114 14   -  -   -  -
-  15 115 215 315   -  - 215 15 315 15
   16 116 216 316 116 16   -  -   -  -
-  17 117 217 317   -  -   -  -   -  -
   18 118 218 318 118 18 218 18   -  -
-  19 119 219 319   -  -   -  -   -  -
   20 120 220 320 120 20   -  - 320 20
-  21 121 221 321   -  - 221 21   -  -
   22 122 222 322 122 22   -  -   -  -
-  23 123 223 323   -  -   -  -   -  -
   24 124 224 324 124 24 224 24   -  -
-  25 125 225 325   -  -   -  - 325 25
   26 126 226 326 126 26   -  -   -  -
-  27 127 227 327   -  - 227 27   -  -
   28 128 228 328 128 28   -  -   -  -
-  29 129 229 329   -  -   -  -   -  -
   30 130 230 330 130 30 230 30 330 30
-  31 131 231 331   -  -   -  -   -  -
   32 132 232 332 132 32   -  -   -  -
-  33 133 233 333   -  - 233 33   -  -
   34 134 234 334 134 34   -  -   -  -
-  35 135 235 335   -  -   -  - 335 35
   36 136 236 336 136 36 236 36   -  -
-  37 137 237 337   -  -   -  -   -  -
   38 138 238 338 138 38   -  -   -  -
-  39 139 239 339   -  - 239 39   -  -
   40 140 240 340 140 40   -  - 340 40
-  41 141 241 341   -  -   -  -   -  -
   42 142 242 342 142 42 242 42   -  -
-  43 143 243 343   -  -   -  -   -  -
   44 144 244 344 144 44   -  -   -  -
-  45 145 245 345   -  - 245 45 345 45
   46 146 246 346 146 46   -  -   -  -
-  47 147 247 347   -  -   -  -   -  -
   48 148 248 348 148 48 248 48   -  -
-  49 149 249 349   -  -   -  -   -  -
   50 150 250 350 150 50   -  - 350 50
-  51 151 251 351   -  - 251 51   -  -
   52 152 252 352 152 52   -  -   -  -
-  53 153 253 353   -  -   -  -   -  -
   54 154 254 354 154 54 254 54   -  -
-  55 155 255 355   -  -   -  - 355 55
   56 156 256 356 156 56   -  -   -  -
-  57 157 257 357   -  - 257 57   -  -
   58 158 258 358 158 58   -  -   -  -
-  59 159 259 359   -  -   -  -   -  -
   60 160 260 360 160 60 260 60 360 60
-  61 161 261 361   -  -   -  -   -  -
   62 162 262 362 162 62   -  -   -  -
-  63 163 263 363   -  - 263 63   -  -
   64 164 264 364 164 64   -  -   -  -
-  65 165 265 365   -  -   -  - 365 65
   66 166 266 366 166 66 266 66   -  -
-  67 167 267 367   -  -   -  -   -  -
   68 168 268 368 168 68   -  -   -  -
-  69 169 269 369   -  - 269 69   -  -
   70 170 270 370 170 70   -  - 370 70
-  71 171 271 371   -  -   -  -   -  -
   72 172 272 372 172 72 272 72   -  -
-  73 173 273 373   -  -   -  -   -  -
   74 174 274 374 174 74   -  -   -  -
-  75 175 275 375   -  - 275 75 375 75
   76 176 276 376 176 76   -  -   -  -
-  77 177 277 377   -  -   -  -   -  -
   78 178 278 378 178 78 278 78   -  -
-  79 179 279 379   -  -   -  -   -  -
   80 180 280 380 180 80   -  - 380 80
-  81 181 281 381   -  - 281 81   -  -
   82 182 282 382 182 82   -  -   -  -
-  83 183 283 383   -  -   -  -   -  -
   84 184 284 384 184 84 284 84   -  -
-  85 185 285 385   -  -   -  - 385 85
   86 186 286 386 186 86   -  -   -  -
-  87 187 287 387   -  - 287 87   -  -
   88 188 288 388 188 88   -  -   -  -
-  89 189 289 389   -  -   -  -   -  -
   90 190 290 390 190 90 290 90 390 90
-  91 191 291 391   -  -   -  -   -  -
   92 192 292 392 192 92   -  -   -  -
-  93 193 293 393   -  - 293 93   -  -
   94 194 294 394 194 94   -  -   -  -
-  95 195 295 395   -  -   -  - 395 95
-  96   - 296 396   -  -   -  -   -  -
-  97 197   - 397   -  -   -  -   -  -
-  98 198 298   -   -  -   -  -   -  -
-  99   -   -   -   -  -   -  -   -  -
-   -   -   -   - 100  0   -  -   -  -
-   -   -   -   -   -  - 200  0   -  -
-   -   -   -   -   -  -   -  - 300  0
 }
-
+do_execsql_test joinD-1167 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t3.y>0
+  FULL JOIN t4 ON t1.d = t4.d AND t4.z>0
+  WHERE t1.b = t2.b AND t1.c = t3.c
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+   6 106 206 306 106  6 206  6   -  -
+  12 112 212 312 112 12 212 12   -  -
+  18 118 218 318 118 18 218 18   -  -
+  24 124 224 324 124 24 224 24   -  -
+  30 130 230 330 130 30 230 30 330 30
+  36 136 236 336 136 36 236 36   -  -
+  42 142 242 342 142 42 242 42   -  -
+  48 148 248 348 148 48 248 48   -  -
+  54 154 254 354 154 54 254 54   -  -
+  60 160 260 360 160 60 260 60 360 60
+  66 166 266 366 166 66 266 66   -  -
+  72 172 272 372 172 72 272 72   -  -
+  78 178 278 378 178 78 278 78   -  -
+  84 184 284 384 184 84 284 84   -  -
+  90 190 290 390 190 90 290 90 390 90
+}
+do_execsql_test joinD-1168 {
+  SELECT t1.*, t2.*, t3.*, t4.*
+  FROM t1 FULL JOIN t2 ON t2.x>0
+  FULL JOIN t3 ON t1.c = t3.c AND t3.y>0
+  FULL JOIN t4 ON t4.z>0
+  WHERE t1.b = t2.b AND t1.d = t4.d
+  ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);
+} {
+  10 110 210 310 110 10   -  - 310 10
+  20 120 220 320 120 20   -  - 320 20
+  30 130 230 330 130 30 230 30 330 30
+  40 140 240 340 140 40   -  - 340 40
+  50 150 250 350 150 50   -  - 350 50
+  60 160 260 360 160 60 260 60 360 60
+  70 170 270 370 170 70   -  - 370 70
+  80 180 280 380 180 80   -  - 380 80
+  90 190 290 390 190 90 290 90 390 90
+}
 #############################################################################
 # The following are extra tests added manually
-
-do_execsql_test joinD-1000 {
+do_execsql_test joinD-extra-1000 {
   CREATE VIEW v1 AS
     SELECT *
     FROM t1 INNER JOIN t2 ON t1.b=t2.b AND t2.x>0
@@ -2921,7 +34786,7 @@ do_execsql_test joinD-1000 {
   36 136 236 336 136 36 236 36   -  -
    -   -   -   -   -  - 239 39   -  -
 }
-do_execsql_test joinD-1010 {
+do_execsql_test joinD-extra-1010 {
   BEGIN;
   UPDATE v1 SET c=c+1000 WHERE y BETWEEN 30 and 40;
   SELECT * FROM v1 WHERE y BETWEEN 30 AND 40 ORDER BY y;
@@ -2932,9 +34797,7 @@ do_execsql_test joinD-1010 {
   36 136 1236 336 136 36 1236 36   -  -
    -   -    -   -   -  -  239 39   -  -
 }
-
 finish_test
-
 #############################################################################
 # This is the TCL script used to generate the psql script that generated
 # the data above.
@@ -2973,13 +34836,11 @@ finish_test
 # }
 # 
 # set n 0
-# set k 0
 # foreach j1 {INNER LEFT RIGHT FULL} {
 #   foreach j2 {INNER LEFT RIGHT FULL} {
 #     foreach j3 {INNER LEFT RIGHT FULL} {
 # 
 # incr n
-# incr k
 # set q1 ""
 # append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
 # append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
@@ -2993,6 +34854,281 @@ finish_test
 # puts $q1
 # echo "\\qecho " "\}"
 # 
+# if {$j1!="FULL"} {
+#   incr n
+#   set q1 ""
+#   append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+#   append q1 "  FROM t1 $j1 JOIN t2 ON t1.b IS NOT DISTINCT FROM t2.b AND t2.x>0\n"
+#   append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+#   append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+#   append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+#   
+#   echo "\\qecho " "do_execsql_test joinB-$n \{"
+#   echo "\\qecho X  " $q1
+#   echo "\\qecho " "\} \{"
+#   puts $q1
+#   echo "\\qecho " "\}"
+# }
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE t2.x>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE (t2.x>0 OR t2.x IS NULL)\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON true\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE t1.b=t2.b AND t2.x>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE t3.y>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE t3.y>0 OR t3.y IS NULL\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d\n"
+# append q1 " WHERE t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d\n"
+# append q1 " WHERE t4.z IS NULL OR t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d\n"
+# append q1 " WHERE t2.x>0 AND t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d\n"
+# append q1 " WHERE t4.z>0 AND t3.y>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+# append q1 " WHERE t2.x>0 AND t3.y>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b\n"
+# append q1 "          $j2 JOIN t3 ON t1.c=t3.c\n"
+# append q1 "          $j3 JOIN t4 ON t1.d=t4.d\n"
+# append q1 " WHERE t2.x>0 AND t3.y>0 AND t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# set op1 [expr {$j1=="FULL"?"=":"IS NOT DISTINCT FROM"}]
+# set op2 [expr {$j2=="FULL"?"=":"IS NOT DISTINCT FROM"}]
+# set op3 [expr {$j3=="FULL"?"=":"IS NOT DISTINCT FROM"}]
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t1.b $op1 t2.b AND t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c $op2 t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d $op3 t4.d AND t4.z>0\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c $op2 t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d $op3 t4.d AND t4.z>0\n"
+# append q1 " WHERE t1.b $op1 t2.b\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t1.d $op3 t4.d AND t4.z>0\n"
+# append q1 " WHERE t1.b $op1 t2.b AND t1.c $op2 t3.c\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# incr n
+# set q1 ""
+# append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+# append q1 "  FROM t1 $j1 JOIN t2 ON t2.x>0\n"
+# append q1 "          $j2 JOIN t3 ON t1.c $op2 t3.c AND t3.y>0\n"
+# append q1 "          $j3 JOIN t4 ON t4.z>0\n"
+# append q1 " WHERE t1.b $op1 t2.b AND t1.d $op3 t4.d\n"
+# append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+# echo "\\qecho " "do_execsql_test joinB-$n \{"
+# echo "\\qecho X  " $q1
+# echo "\\qecho " "\} \{"
+# puts $q1
+# echo "\\qecho " "\}"
+# 
+# if {$j1!="FULL"} {
+#   incr n
+#   set q1 ""
+#   append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+#   append q1 "  FROM t1 $j1 JOIN t2 ON t1.b IN (t2.b,-2,-3) AND t2.x>0\n"
+#   append q1 "          $j2 JOIN t3 ON t1.c=t3.c AND t3.y>0\n"
+#   append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+#   append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+#   echo "\\qecho " "do_execsql_test joinB-$n \{"
+#   echo "\\qecho X  " $q1
+#   echo "\\qecho " "\} \{"
+#   puts $q1
+#   echo "\\qecho " "\}"
+# }
+# 
+# if {$j2!="FULL"} {
+#   incr n
+#   set q1 ""
+#   append q1 "SELECT t1.*, t2.*, t3.*, t4.*\n"
+#   append q1 "  FROM t1 $j1 JOIN t2 ON t1.b=t2.b AND t2.x>0\n"
+#   append q1 "          $j2 JOIN t3 ON t1.c IN (-4,t3.c,-5) AND t3.y>0\n"
+#   append q1 "          $j3 JOIN t4 ON t1.d=t4.d AND t4.z>0\n"
+#   append q1 " ORDER BY coalesce(t1.a,t2.b,t3.c,t4.d,0);"
+# 
+#   echo "\\qecho " "do_execsql_test joinB-$n \{"
+#   echo "\\qecho X  " $q1
+#   echo "\\qecho " "\} \{"
+#   puts $q1
+#   echo "\\qecho " "\}"
+# }
 #     }
 #   }
 # }
+#