diff --git a/ee/app/models/ee/epic.rb b/ee/app/models/ee/epic.rb
index 1d9964325d0bc41aa5ca185a06cdd2315b8e4d24..b1b6ea2413e2594dc68cf20722c490fd521e762b 100644
--- a/ee/app/models/ee/epic.rb
+++ b/ee/app/models/ee/epic.rb
@@ -112,6 +112,7 @@ module Epic
       end
 
       scope :with_work_item, -> { preload(:work_item) }
+      scope :has_work_item, -> { where.not(issue_id: nil) }
 
       scope :within_timeframe, -> (start_date, end_date) do
         epics = ::Epic.arel_table
diff --git a/ee/lib/ee/gitlab/event_store.rb b/ee/lib/ee/gitlab/event_store.rb
index 621c78a0262f171f872bc5e4d2de4e7af5ad7a6e..e2caa889043e0b7b81f40d4e0f72c4c0117fc095 100644
--- a/ee/lib/ee/gitlab/event_store.rb
+++ b/ee/lib/ee/gitlab/event_store.rb
@@ -78,12 +78,14 @@ def subscribe_to_epic_events(store)
           store.subscribe ::WorkItems::ValidateEpicWorkItemSyncWorker,
             to: ::Epics::EpicCreatedEvent,
             if: ->(event) {
-                  ::Feature.enabled?(:validate_epic_work_item_sync, ::Group.find_by_id(event.data[:group_id]))
+                  ::Feature.enabled?(:validate_epic_work_item_sync, ::Group.actor_from_id(event.data[:group_id])) &&
+                    ::Epic.has_work_item.id_in(event.data[:id]).exists?
                 }
           store.subscribe ::WorkItems::ValidateEpicWorkItemSyncWorker,
             to: ::Epics::EpicUpdatedEvent,
             if: ->(event) {
-                  ::Feature.enabled?(:validate_epic_work_item_sync, ::Group.find_by_id(event.data[:group_id]))
+                  ::Feature.enabled?(:validate_epic_work_item_sync, ::Group.actor_from_id(event.data[:group_id])) &&
+                    ::Epic.has_work_item.id_in(event.data[:id]).exists?
                 }
         end
       end
diff --git a/ee/spec/models/epic_spec.rb b/ee/spec/models/epic_spec.rb
index e52443e86cecbb664079b97c978daf5b3882a2dc..71ae462c99c13472b74e1f294bbdcd291b581148 100644
--- a/ee/spec/models/epic_spec.rb
+++ b/ee/spec/models/epic_spec.rb
@@ -137,6 +137,15 @@
         expect(described_class.from_id(epic2.id)).to match_array([epic2, epic3])
       end
     end
+
+    describe '.has_work_item' do
+      let_it_be(:epic_with_work_item) { create(:epic, :with_synced_work_item) }
+      let_it_be(:epic_without_work_item) { create(:epic) }
+
+      it 'returns only epics with a work item' do
+        expect(described_class.has_work_item).to match_array([epic_with_work_item])
+      end
+    end
   end
 
   describe 'validations' do
diff --git a/ee/spec/workers/work_items/validate_epic_work_item_sync_worker_spec.rb b/ee/spec/workers/work_items/validate_epic_work_item_sync_worker_spec.rb
index 4eaddebf6a2aafda17de9e4c3759c8b0adb525aa..f1a03f4dda437a78c89b38df66e7f33210f5c0e8 100644
--- a/ee/spec/workers/work_items/validate_epic_work_item_sync_worker_spec.rb
+++ b/ee/spec/workers/work_items/validate_epic_work_item_sync_worker_spec.rb
@@ -4,7 +4,7 @@
 
 RSpec.describe WorkItems::ValidateEpicWorkItemSyncWorker, feature_category: :team_planning do
   let_it_be(:group) { create(:group) }
-  let_it_be_with_reload(:epic) { create(:epic, group: group) }
+  let_it_be_with_reload(:epic) { create(:epic, :with_synced_work_item, group: group) }
 
   let(:data) { { id: epic.id, group_id: group.id } }
   let(:epic_created_event) { Epics::EpicCreatedEvent.new(data: data) }
@@ -39,6 +39,8 @@
   end
 
   context 'when epic has no associated work item' do
+    let_it_be_with_reload(:epic) { create(:epic, group: group) }
+
     it 'does not log anything or tries to create a diff' do
       expect(Gitlab::EpicWorkItemSync::Logger).not_to receive(:warn)
       expect(Gitlab::EpicWorkItemSync::Diff).not_to receive(:new)