diff --git a/app/services/merge_requests/refresh_service.rb b/app/services/merge_requests/refresh_service.rb
index 22596b4014ab3c77c62634139a2a10a0f3bd09fd..4a7e69308421399fb4e199edaf154e627700ae08 100644
--- a/app/services/merge_requests/refresh_service.rb
+++ b/app/services/merge_requests/refresh_service.rb
@@ -60,15 +60,7 @@ module MergeRequests
       merge_requests = filter_merge_requests(merge_requests)
 
       merge_requests.each do |merge_request|
-        if merge_request.source_branch == @branch_name || force_push?
-          merge_request.reload_diff
-        else
-          mr_commit_ids = merge_request.commits.map(&:id)
-          push_commit_ids = @commits.map(&:id)
-          matches = mr_commit_ids & push_commit_ids
-          merge_request.reload_diff if matches.any?
-        end
-
+        reload_diff(merge_request) unless branch_removed?
         merge_request.mark_as_unchecked
       end
     end
@@ -173,5 +165,16 @@ module MergeRequests
     def branch_removed?
       Gitlab::Git.blank_ref?(@newrev)
     end
+
+    def reload_diff(merge_request)
+      if merge_request.source_branch == @branch_name || force_push?
+        merge_request.reload_diff
+      else
+        mr_commit_ids = merge_request.commits.map(&:id)
+        push_commit_ids = @commits.map(&:id)
+        matches = mr_commit_ids & push_commit_ids
+        merge_request.reload_diff if matches.any?
+      end
+    end
   end
 end
diff --git a/changelogs/unreleased/fix-merge-request-screen-deleted-source-branch.yml b/changelogs/unreleased/fix-merge-request-screen-deleted-source-branch.yml
new file mode 100644
index 0000000000000000000000000000000000000000..a6bee989f6da79d91f7dc16c86dd75b059a47445
--- /dev/null
+++ b/changelogs/unreleased/fix-merge-request-screen-deleted-source-branch.yml
@@ -0,0 +1,4 @@
+---
+title: Do not create a MergeRequestDiff record when source branch is deleted
+merge_request: 7481
+author:
diff --git a/spec/services/merge_requests/refresh_service_spec.rb b/spec/services/merge_requests/refresh_service_spec.rb
index e515bc9f89c2dabc066b3c9b776635a070026cca..0220f7e1db2a9a0289ed1756ef1b6f5b08b325db 100644
--- a/spec/services/merge_requests/refresh_service_spec.rb
+++ b/spec/services/merge_requests/refresh_service_spec.rb
@@ -227,6 +227,16 @@ describe MergeRequests::RefreshService, services: true do
       end
     end
 
+    context 'when the source branch is deleted' do
+      it 'does not create a MergeRequestDiff record' do
+        refresh_service = service.new(@project, @user)
+
+        expect do
+          refresh_service.execute(@oldrev, Gitlab::Git::BLANK_SHA, 'refs/heads/master')
+        end.not_to change { MergeRequestDiff.count }
+      end
+    end
+
     def reload_mrs
       @merge_request.reload
       @fork_merge_request.reload