Just an alternative:
m[l_] := Range[-l, l]
You can produce list:
res = Join @@ Function[x, {x, #} & /@ m[x]] /@ Range[0, 2]
This yields:
{{0, 0}, {1, -1}, {1, 0}, {1, 1}, {2, -2}, {2, -1}, {2, 0}, {2,
1}, {2, 2}}
Gathering:
GatherBy[res, Last]
yields:
{{{0, 0}, {1, 0}, {2, 0}}, {{1, -1}, {2, -1}}, {{1, 1}, {2, 1}}, {{2, -2}}, {{2, 2}}}