diff --git a/app/models/account_statuses_cleanup_policy.rb b/app/models/account_statuses_cleanup_policy.rb
index a102795446d465170af6c49ab89bb74701dbd459..e2c035284be24f7c2c5fe9bcff02af5485850e63 100644
--- a/app/models/account_statuses_cleanup_policy.rb
+++ b/app/models/account_statuses_cleanup_policy.rb
@@ -145,15 +145,15 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
   end
 
   def without_self_fav_scope
-    Status.where('NOT EXISTS (SELECT 1 FROM favourites fav WHERE fav.account_id = statuses.account_id AND fav.status_id = statuses.id)')
+    Status.where.not(self_status_reference_exists(Favourite))
   end
 
   def without_self_bookmark_scope
-    Status.where('NOT EXISTS (SELECT 1 FROM bookmarks bookmark WHERE bookmark.account_id = statuses.account_id AND bookmark.status_id = statuses.id)')
+    Status.where.not(self_status_reference_exists(Bookmark))
   end
 
   def without_pinned_scope
-    Status.where('NOT EXISTS (SELECT 1 FROM status_pins pin WHERE pin.account_id = statuses.account_id AND pin.status_id = statuses.id)')
+    Status.where.not(self_status_reference_exists(StatusPin))
   end
 
   def without_media_scope
@@ -174,4 +174,13 @@ class AccountStatusesCleanupPolicy < ApplicationRecord
   def account_statuses
     Status.where(account_id: account_id)
   end
+
+  def self_status_reference_exists(model)
+    model
+      .where(model.arel_table[:account_id].eq Status.arel_table[:account_id])
+      .where(model.arel_table[:status_id].eq Status.arel_table[:id])
+      .select(1)
+      .arel
+      .exists
+  end
 end