diff --git a/app/finders/merge_requests_finder.rb b/app/finders/merge_requests_finder.rb
index c998de75ab22e58d77e47d767378b40f8958633e..28b1530456baefab1ac979f2c43f588c258ece6b 100644
--- a/app/finders/merge_requests_finder.rb
+++ b/app/finders/merge_requests_finder.rb
@@ -66,6 +66,11 @@ def filter_items(_items)
     by_source_project_id(items)
   end
 
+  def filter_negated_items(items)
+    items = super(items)
+    by_negated_target_branch(items)
+  end
+
   private
 
   def by_commit(items)
@@ -98,6 +103,14 @@ def by_target_branch(items)
   end
   # rubocop: enable CodeReuse/ActiveRecord
 
+  # rubocop: disable CodeReuse/ActiveRecord
+  def by_negated_target_branch(items)
+    return items unless not_params[:target_branch]
+
+    items.where.not(target_branch: not_params[:target_branch])
+  end
+  # rubocop: enable CodeReuse/ActiveRecord
+
   def source_project_id
     @source_project_id ||= params[:source_project_id].presence
   end
diff --git a/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml b/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml
new file mode 100644
index 0000000000000000000000000000000000000000..169bf3562890e93a09028b4326cca766431ce240
--- /dev/null
+++ b/changelogs/unreleased/ph-filterTargetBranchByNotEquals.yml
@@ -0,0 +1,5 @@
+---
+title: Fixed target branch not filtering
+merge_request: 45652
+author:
+type: fixed
diff --git a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
index 540d87eb969ee14df35d6078c813daf625044472..1d9c80238f57a45f0e25ad2abc0be15f0f96666d 100644
--- a/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
+++ b/spec/features/merge_requests/user_filters_by_target_branch_spec.rb
@@ -44,4 +44,14 @@
       expect(page).not_to have_content mr2.title
     end
   end
+
+  context 'filtering by target-branch:!=master' do
+    it 'applies the filter' do
+      input_filtered_search('target-branch:!=master')
+
+      expect(page).to have_issuable_counts(open: 1, closed: 0, all: 1)
+      expect(page).not_to have_content mr1.title
+      expect(page).to have_content mr2.title
+    end
+  end
 end