diff --git a/app/models/user.rb b/app/models/user.rb
index fd0b002b69e0d7bc2e8bf3de2ea97ac8a3e1f207..26d0d31a1462924654de7c32593e96f6202b93b9 100644
--- a/app/models/user.rb
+++ b/app/models/user.rb
@@ -611,7 +611,7 @@ def blocked?
       user.class.temporary_ignore_cross_database_tables(
         %w[projects], url: 'https://gitlab.com/gitlab-org/gitlab/-/issues/424278'
       ) do
-        user.starred_projects.update_counters(star_count: -1)
+        user.starred_projects.where('star_count > 0').update_counters(star_count: -1)
       end
     end
   end
diff --git a/app/models/users_star_project.rb b/app/models/users_star_project.rb
index c8bc5e0dcfd01a5d8c463868e25a4fb685ae74b7..e67d2cdc0ce180e10b42dacd0d5d98b7ba1557af 100644
--- a/app/models/users_star_project.rb
+++ b/app/models/users_star_project.rb
@@ -47,6 +47,9 @@ def increment_project_star_count
   end
 
   def decrement_project_star_count
-    Project.update_counters(project, star_count: -1) if user.active?
+    return unless user.active?
+    return unless project.star_count > 0
+
+    Project.update_counters(project, star_count: -1)
   end
 end
diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb
index bcefd752b518b81f4edaf9d124283284b7ae5e5e..e15af81ff908a0237fc9564ca18cc068cf06349d 100644
--- a/spec/models/user_spec.rb
+++ b/spec/models/user_spec.rb
@@ -3073,6 +3073,14 @@
       it 'decrements star count of project' do
         expect { user.block }.to change { project.reload.star_count }.by(-1)
       end
+
+      context 'when star count of project is 0' do
+        it 'does not decrement star count of project' do
+          project.update!(star_count: 0)
+
+          expect { user.block }.not_to change { project.reload.star_count }
+        end
+      end
     end
 
     context 'when activating a user' do
diff --git a/spec/models/users_star_project_spec.rb b/spec/models/users_star_project_spec.rb
index 60ec108f77d9621d56d989719834524ecc8da35d..b84ed8af6b0d7d0f8067ca334dbd22036b333904 100644
--- a/spec/models/users_star_project_spec.rb
+++ b/spec/models/users_star_project_spec.rb
@@ -73,6 +73,14 @@
         it 'decrements star count of project' do
           expect { users_star_project.destroy! }.to change { project2.reload.star_count }.by(-1)
         end
+
+        context 'when star count of project is 0' do
+          it 'does not decrement star count of project' do
+            project2.reload.update!(star_count: 0)
+
+            expect { users_star_project.destroy! }.not_to change { project2.reload.star_count }
+          end
+        end
       end
 
       context 'if user is not active' do