dzieje się tak z powodu różnicy między typem danych geography a typem danych geometry.
Najlepiej wyjaśnić na przykładzie.
declare @point1 as geography
declare @point2 as geography
set @point1 = geography::STGeomFromText('POINT (7 1)', 4326)
set @point2 = geography::STGeomFromText('POINT (7 3)', 4326)
select @point1.STDistance(@point2)
declare @point3 as geometry
declare @point4 as geometry
set @point3 = geometry::STGeomFromText('POINT (7 1)', 4326)
set @point4 = geometry::STGeomFromText('POINT (7 3)', 4326)
select @point3.STDistance(@point4)
Jeśli uruchomisz to bezpośrednio w SQL Server Management Studio, otrzymasz 221151.479533501 w pierwszym wyniku i 2 w drugim.
Dzieje się tak, ponieważ w typie danych geograficznych jednostka jest wybierana zgodnie z dostarczonym SRID. W twoim przypadku 4326 jest w metrach. Więc pytasz o odległość w metrach między współrzędnymi (lon:7; lat:1) i (lon:7; lat:3). Wraca około 221 km.
Podczas korzystania z typu geometrii (drugi przykład) jest to rzut płaski, w którym odległość działa zgodnie z oczekiwaniami, zwracając w ten sposób 2.
Jeśli chodzi o kod przestrzenny NH, wydaje się, że jest w porządku. Wystarczy podać parametr maxDistance w metrach i wszystko powinno być w porządku.