diff --git a/golden/go/web/web.go b/golden/go/web/web.go
index 73a3fc3..79d6fb5 100644
--- a/golden/go/web/web.go
+++ b/golden/go/web/web.go
@@ -555,7 +555,7 @@
 	ctx, cancel := context.WithTimeout(r.Context(), 3*time.Minute)
 	defer cancel()
 	var span *trace.Span
-	if r.Form.Get("use_sql") != "" {
+	if r.Form.Get("use_sql") != "false" {
 		ctx = context.WithValue(ctx, search.UseSQLDiffMetricsKey, true)
 		ctx, span = trace.StartSpan(ctx, "SearchHandler_sql")
 	} else {
@@ -702,7 +702,7 @@
 	}
 
 	ctx := r.Context()
-	if r.Form.Get("use_sql") != "" {
+	if r.Form.Get("use_sql") != "false" {
 		ctx = context.WithValue(ctx, search.UseSQLDiffMetricsKey, true)
 	}
 	ret, err := wh.SearchAPI.DiffDigests(ctx, types.TestName(test), types.Digest(left), types.Digest(right), clID, crs)
@@ -1065,7 +1065,7 @@
 	testName := testNames[0]
 	ctx := r.Context()
 	var span *trace.Span
-	if r.Form.Get("use_sql") != "" {
+	if r.Form.Get("use_sql") != "false" {
 		ctx = context.WithValue(ctx, search.UseSQLDiffMetricsKey, true)
 		ctx, span = trace.StartSpan(ctx, "ClusterDiff_sql")
 	} else {
diff --git a/golden/go/web/web_test.go b/golden/go/web/web_test.go
index 9300414..91432b7 100644
--- a/golden/go/web/web_test.go
+++ b/golden/go/web/web_test.go
@@ -2592,7 +2592,7 @@
 	test("invalid trace values", "/json/list?corpus=gm&trace_values=%zz")
 }
 
-func TestDiffHandler_DefaultContext_Success(t *testing.T) {
+func TestDiffHandler_DefaultUsesSQL_Success(t *testing.T) {
 	unittest.SmallTest(t)
 
 	ms := &mock_search.SearchAPI{}
@@ -2600,7 +2600,12 @@
 	const testAlpha = types.TestName("alpha")
 	const leftDigest = types.Digest("11111111111111111111111111111111")
 	const rightDigest = types.Digest("22222222222222222222222222222222")
-	ms.On("DiffDigests", testutils.AnyContext, testAlpha, leftDigest, rightDigest, "", "").Return(&search_fe.DigestComparison{
+	ctxMatcher := mock.MatchedBy(func(ctx context.Context) bool {
+		v := ctx.Value(search.UseSQLDiffMetricsKey)
+		assert.NotNil(t, v)
+		return true
+	})
+	ms.On("DiffDigests", ctxMatcher, testAlpha, leftDigest, rightDigest, "", "").Return(&search_fe.DigestComparison{
 		// Arbitrary data from a search unit test.
 		Left: search_fe.SearchResult{
 			Test:   testAlpha,
@@ -2699,6 +2704,62 @@
 	assertJSONResponseWas(t, http.StatusOK, expectedResponse, w)
 }
 
+func TestDiffHandler_OptOutOfSQLDiffMetrics_NoContextValueAdded(t *testing.T) {
+	unittest.SmallTest(t)
+
+	ms := &mock_search.SearchAPI{}
+
+	const testAlpha = types.TestName("alpha")
+	const leftDigest = types.Digest("11111111111111111111111111111111")
+	const rightDigest = types.Digest("22222222222222222222222222222222")
+	ctxMatcher := mock.MatchedBy(func(ctx context.Context) bool {
+		v := ctx.Value(search.UseSQLDiffMetricsKey)
+		assert.Nil(t, v)
+		return true
+	})
+	ms.On("DiffDigests", ctxMatcher, testAlpha, leftDigest, rightDigest, "", "").Return(&search_fe.DigestComparison{
+		// Arbitrary data from a search unit test.
+		Left: search_fe.SearchResult{
+			Test:   testAlpha,
+			Digest: leftDigest,
+			Status: expectations.Untriaged,
+			ParamSet: paramtools.ParamSet{
+				"device":              []string{data.BullheadDevice},
+				types.PrimaryKeyField: []string{string(data.AlphaTest)},
+				types.CorpusField:     []string{"gm"},
+				"ext":                 {data.PNGExtension},
+			},
+		},
+		Right: &search_fe.SRDiffDigest{
+			Digest:           rightDigest,
+			Status:           expectations.Positive,
+			NumDiffPixels:    13,
+			PixelDiffPercent: 0.5,
+			MaxRGBADiffs:     [4]int{8, 9, 10, 11},
+			DimDiffer:        true,
+			CombinedMetric:   4.2,
+			ParamSet: paramtools.ParamSet{
+				"device":              []string{data.AnglerDevice, data.CrosshatchDevice},
+				types.PrimaryKeyField: []string{string(data.AlphaTest)},
+				types.CorpusField:     []string{"gm"},
+				"ext":                 {data.PNGExtension},
+			},
+		},
+	}, nil)
+
+	wh := Handlers{
+		HandlersConfig: HandlersConfig{
+			SearchAPI: ms,
+		},
+		anonymousCheapQuota: rate.NewLimiter(rate.Inf, 1),
+	}
+	w := httptest.NewRecorder()
+	r := httptest.NewRequest(http.MethodGet, "/json/v1/diff?use_sql=false&test=alpha&left=11111111111111111111111111111111&right=22222222222222222222222222222222", nil)
+	wh.DiffHandler(w, r)
+	const expectedResponse = `{"left":{"digest":"11111111111111111111111111111111","test":"alpha","status":"untriaged","triage_history":null,"paramset":{"device":["bullhead"],"ext":["png"],"name":["test_alpha"],"source_type":["gm"]},"traces":{"tileSize":0,"traces":null,"digests":null,"total_digests":0},"refDiffs":null,"closestRef":""},"right":{"numDiffPixels":13,"combinedMetric":4.2,"pixelDiffPercent":0.5,"maxRGBADiffs":[8,9,10,11],"dimDiffer":true,"digest":"22222222222222222222222222222222","status":"positive","paramset":{"device":["angler","crosshatch"],"ext":["png"],"name":["test_alpha"],"source_type":["gm"]},"n":0}}`
+	assertJSONResponseWas(t, http.StatusOK, expectedResponse, w)
+}
+
 // Because we are calling our handlers directly, the target URL doesn't matter. The target URL
 // would only matter if we were calling into the router, so it knew which handler to call.
 const requestURL = "/does/not/matter"
