diff --git a/core/includes/database.inc b/core/includes/database.inc
index d4cb593af6..a15bab3738 100644
--- a/core/includes/database.inc
+++ b/core/includes/database.inc
@@ -644,6 +644,10 @@ function db_index_exists($table, $name) {
  * @see \Drupal\Core\Database\Schema::tableExists()
  */
 function db_table_exists($table) {
+  @trigger_error(
+    "Deprecated as of Drupal 8.0.x, will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call tableExists() on it. For example, \$injected_database->schema()->tableExists(\$table);",
+    E_USER_DEPRECATED
+  );
   return Database::getConnection()->schema()->tableExists($table);
 }
 
diff --git a/core/includes/schema.inc b/core/includes/schema.inc
index 443cbf1934..c0b3a1a218 100644
--- a/core/includes/schema.inc
+++ b/core/includes/schema.inc
@@ -134,9 +134,7 @@ function drupal_uninstall_schema($module) {
   _drupal_schema_initialize($schema, $module, FALSE);
 
   foreach ($schema as $table) {
-    if (db_table_exists($table['name'])) {
-      db_drop_table($table['name']);
-    }
+    db_drop_table($table['name']);
   }
 }
 
diff --git a/core/modules/simpletest/src/Tests/KernelTestBaseTest.php b/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
index 1e9e75da0b..bcb1124ee2 100644
--- a/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
+++ b/core/modules/simpletest/src/Tests/KernelTestBaseTest.php
@@ -62,7 +62,7 @@ public function testSetUp() {
     $this->assertIdentical(\Drupal::moduleHandler()->getImplementations('entity_type_alter'), ['entity_test']);
 
     // Verify that no modules have been installed.
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
 
     // Verify that the settings.testing.php got taken into account.
     $this->assertTrue(function_exists('simpletest_test_stub_settings_function'));
@@ -114,7 +114,7 @@ public function testEnableModulesInstall() {
     $list = \Drupal::moduleHandler()->getImplementations('hook_info');
     $this->assertFalse(in_array($module, $list), "{$module}_hook_info() in \Drupal::moduleHandler()->getImplementations() not found.");
 
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
 
     // Install the module.
     \Drupal::service('module_installer')->install([$module]);
@@ -126,7 +126,7 @@ public function testEnableModulesInstall() {
     $list = \Drupal::moduleHandler()->getImplementations('hook_info');
     $this->assertTrue(in_array($module, $list), "{$module}_hook_info() in \Drupal::moduleHandler()->getImplementations() found.");
 
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
   }
@@ -156,7 +156,7 @@ public function testInstallSchema() {
     $table = 'entity_test_example';
     // Verify that we can install a table from the module schema.
     $this->installSchema($module, $table);
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
 
     // Verify that the schema is known to Schema API.
     $schema = drupal_get_module_schema($module, $table);
@@ -171,7 +171,7 @@ public function testInstallSchema() {
     catch (\Exception $e) {
       $this->pass('Exception for non-retrievable schema found.');
     }
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertFalse($schema, "'$table' table schema not found.");
 
@@ -185,14 +185,14 @@ public function testInstallSchema() {
     catch (\Exception $e) {
       $this->pass('Exception for non-retrievable schema found.');
     }
-    $this->assertFalse(db_table_exists($table), "'$table' database table not found.");
+    $this->assertFalse(\Drupal::database()->schema()->tableExists($table), "'$table' database table not found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
 
     // Verify that the same table can be installed after enabling the module.
     $this->enableModules([$module]);
     $this->installSchema($module, $table);
-    $this->assertTrue(db_table_exists($table), "'$table' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($table), "'$table' database table found.");
     $schema = drupal_get_module_schema($module, $table);
     $this->assertTrue($schema, "'$table' table schema found.");
   }
@@ -206,7 +206,7 @@ public function testInstallEntitySchema() {
     $this->enableModules(['user']);
     // Verity that the entity schema is created properly.
     $this->installEntitySchema($entity);
-    $this->assertTrue(db_table_exists($entity), "'$entity' database table found.");
+    $this->assertTrue(\Drupal::database()->schema()->tableExists($entity), "'$entity' database table found.");
   }
 
   /**
diff --git a/core/modules/system/src/Tests/Module/ModuleTestBase.php b/core/modules/system/src/Tests/Module/ModuleTestBase.php
index cc5a7ef270..c93a3284a4 100644
--- a/core/modules/system/src/Tests/Module/ModuleTestBase.php
+++ b/core/modules/system/src/Tests/Module/ModuleTestBase.php
@@ -60,7 +60,7 @@ public function assertModuleTablesExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = TRUE;
     foreach ($tables as $table) {
-      if (!db_table_exists($table)) {
+      if (!(\Drupal::database()->schema()->tableExists($table))) {
         $tables_exist = FALSE;
       }
     }
@@ -77,7 +77,7 @@ public function assertModuleTablesDoNotExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = FALSE;
     foreach ($tables as $table) {
-      if (db_table_exists($table)) {
+      if (\Drupal::database()->schema()->tableExists($table)) {
         $tables_exist = TRUE;
       }
     }
diff --git a/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php b/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
index 5226585790..1e5f625e52 100644
--- a/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
+++ b/core/modules/system/tests/src/Functional/Database/TemporaryQueryTest.php
@@ -29,7 +29,7 @@ public function testTemporaryQuery() {
     $data = json_decode($this->getSession()->getPage()->getContent());
     if ($data) {
       $this->assertEqual($this->countTableRows('test'), $data->row_count, 'The temporary table contains the correct amount of rows.');
-      $this->assertFalse(db_table_exists($data->table_name), 'The temporary table is, indeed, temporary.');
+      $this->assertFalse(\Drupal::database()->schema()->tableExists($data->table_name), 'The temporary table is, indeed, temporary.');
     }
     else {
       $this->fail('The creation of the temporary table failed.');
diff --git a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
index abdbe03916..f240e38a6d 100644
--- a/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
+++ b/core/modules/system/tests/src/Functional/Module/ModuleTestBase.php
@@ -57,7 +57,7 @@ public function assertModuleTablesExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = TRUE;
     foreach ($tables as $table) {
-      if (!db_table_exists($table)) {
+      if (!(\Drupal::database()->schema()->tableExists($table))) {
         $tables_exist = FALSE;
       }
     }
@@ -74,7 +74,7 @@ public function assertModuleTablesDoNotExist($module) {
     $tables = array_keys(drupal_get_module_schema($module));
     $tables_exist = FALSE;
     foreach ($tables as $table) {
-      if (db_table_exists($table)) {
+      if (\Drupal::database()->schema()->tableExists($table)) {
         $tables_exist = TRUE;
       }
     }
diff --git a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
index 66eed0ae92..cd04480e84 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/RegressionTest.php
@@ -6,6 +6,7 @@
  * Regression tests cases for the database layer.
  *
  * @group Database
+ * @group legacy
  */
 class RegressionTest extends DatabaseTestBase {
 
@@ -35,6 +36,8 @@ public function testRegression_310447() {
 
   /**
    * Tests the db_table_exists() function.
+   *
+   * @expectedDeprecation Deprecated as of Drupal 8.0.x, will be removed in Drupal 9.0.0. Instead, get a database connection injected into your service from the container, get its schema driver, and call tableExists() on it. For example, $injected_database->schema()->tableExists($table);
    */
   public function testDBTableExists() {
     $this->assertSame(TRUE, db_table_exists('test'), 'Returns true for existent table.');
diff --git a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
index e239098715..0a10b05c37 100644
--- a/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Database/SchemaTest.php
@@ -55,7 +55,7 @@ public function testSchema() {
     db_create_table('test_table', $table_specification);
 
     // Assert that the table exists.
-    $this->assertTrue(db_table_exists('test_table'), 'The table exists.');
+    $this->assertTrue(\Drupal::database()->schema()->tableExists('test_table'), 'The table exists.');
 
     // Assert that the table comment has been set.
     $this->checkSchemaComment($table_specification['description'], 'test_table');
@@ -118,7 +118,7 @@ public function testSchema() {
 
     // Try to drop the table.
     db_drop_table('test_table2');
-    $this->assertFalse(db_table_exists('test_table2'), 'The dropped table does not exist.');
+    $this->assertFalse(\Drupal::database()->schema()->tableExists('test_table2'), 'The dropped table does not exist.');
 
     // Recreate the table.
     db_create_table('test_table', $table_specification);
@@ -254,7 +254,7 @@ public function testSchema() {
     }
     catch (\Exception $e) {
     }
-    $this->assertTrue(db_table_exists('test_timestamp'), 'Table with database specific datatype was created.');
+    $this->assertTrue(\Drupal::database()->schema()->tableExists('test_timestamp'), 'Table with database specific datatype was created.');
   }
 
   /**
diff --git a/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php b/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
index 7ff6caf2b1..313169a783 100644
--- a/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
+++ b/core/tests/Drupal/KernelTests/Core/Entity/FieldSqlStorageTest.php
@@ -381,7 +381,7 @@ public function testFieldUpdateFailure() {
       $this->tableMapping->getDedicatedRevisionTableName($prior_field_storage),
     ];
     foreach ($tables as $table_name) {
-      $this->assertTrue(db_table_exists($table_name), t('Table %table exists.', ['%table' => $table_name]));
+      $this->assertTrue(\Drupal::database()->schema()->tableExists($table_name), t('Table %table exists.', ['%table' => $table_name]));
     }
   }
 
