The difference between the full-batch and sample updates is just exact rational arithmetic.
The gradients differ
The sample gradient minus the full gradient is (-1/3, -2/3). That exact difference is why the steps land in different places.
gs2−gfull=(−1/3,−2/3)
The landing points differ
The sample update minus the full update is (1/6, 1/3). The difference is exact, not noise added by the renderer.
(a,b)s2−(a,b)full=(1/6,1/3)
Summary
Full-batch uses all rows in the average. SGD uses the chosen row's gradient for this one step.
average gradient=chosen-row gradient