diff --git a/internal/postgres/delete.go b/internal/postgres/delete.go
index 0af9a18..806d83b 100644
--- a/internal/postgres/delete.go
+++ b/internal/postgres/delete.go
@@ -66,16 +66,13 @@
 		// Nothing to delete.
 		return nil
 	}
-	return deleteModuleOrPackagesInModuleFromSearchDocuments(ctx, tx, m.ModulePath, otherPkgs)
+	return deletePackagesInModuleFromSearchDocuments(ctx, tx, otherPkgs)
 }
 
-// deleteModuleOrPackagesInModuleFromSearchDocuments deletes module_path from
-// search_documents. If packages is non-empty, it only deletes those packages.
-func deleteModuleOrPackagesInModuleFromSearchDocuments(ctx context.Context, tx *database.DB, modulePath string, packages []string) error {
-	d := squirrel.Delete("search_documents").Where(squirrel.Eq{"module_path": modulePath})
-	if len(packages) > 0 {
-		d = d.Where("package_path = ANY(?)", pq.Array(packages))
-	}
+// deleteModuleFromSearchDocuments deletes module_path from search_documents.
+func deleteModuleFromSearchDocuments(ctx context.Context, tx *database.DB, modulePath string) error {
+	d := squirrel.Delete("search_documents").
+		Where(squirrel.Eq{"module_path": modulePath})
 	q, args, err := d.PlaceholderFormat(squirrel.Dollar).ToSql()
 	if err != nil {
 		return err
@@ -88,6 +85,22 @@
 	return nil
 }
 
+// deletePackagesInModuleFromSearchDocuments deletes packages from search_documents.
+func deletePackagesInModuleFromSearchDocuments(ctx context.Context, tx *database.DB, pkgPaths []string) error {
+	d := squirrel.Delete("search_documents").
+		Where("package_path = ANY(?)", pq.Array(pkgPaths))
+	q, args, err := d.PlaceholderFormat(squirrel.Dollar).ToSql()
+	if err != nil {
+		return err
+	}
+	n, err := tx.Exec(ctx, q, args...)
+	if err != nil {
+		return err
+	}
+	log.Infof(ctx, "deleted %d rows from search_documents: %v", n, pkgPaths)
+	return nil
+}
+
 func deleteModuleFromImportsUnique(ctx context.Context, db *database.DB, modulePath string) (err error) {
 	defer derrors.Wrap(&err, "deleteModuleFromImportsUnique(%q)", modulePath)
 
diff --git a/internal/postgres/delete_test.go b/internal/postgres/delete_test.go
index 87868f3..fdd080b 100644
--- a/internal/postgres/delete_test.go
+++ b/internal/postgres/delete_test.go
@@ -91,7 +91,7 @@
 		defer release()
 		insertInitial(testDB)
 
-		if err := deleteModuleOrPackagesInModuleFromSearchDocuments(ctx, testDB.db, modulePath, nil); err != nil {
+		if err := deleteModuleFromSearchDocuments(ctx, testDB.db, modulePath); err != nil {
 			t.Fatal(err)
 		}
 		checkSearchDocuments(ctx, t, testDB, []searchDocumentRow{
diff --git a/internal/postgres/insert_module.go b/internal/postgres/insert_module.go
index d977141..542354f 100644
--- a/internal/postgres/insert_module.go
+++ b/internal/postgres/insert_module.go
@@ -677,7 +677,7 @@
 			// A missing GoodVersion means that there are no good versions
 			// remaining. In that case, or if this is an alternative module, we
 			// should remove the module from search.
-			if err := deleteModuleOrPackagesInModuleFromSearchDocuments(ctx, tx, modulePath, nil); err != nil {
+			if err := deleteModuleFromSearchDocuments(ctx, tx, modulePath); err != nil {
 				return err
 			}
 			if err := deleteModuleFromImportsUnique(ctx, tx, modulePath); err != nil {
