Removing lists with zero at any position

 DeleteCases[Tuples[Range[-2, 2], 2], {___, 0, ___}] (* or *)
 DeleteCases[data, {0, 0}|{1,0}|{0,1}]

{{-2, -2}, {-2, -1}, {-2, 1}, {-2, 2}, {-1, -2}, {-1, -1}, {-1, 1}, {-1, 2}, {1, -2}, {1, -1}, {1, 1}, {1, 2}, {2, -2}, {2, -1}, {2, 1}, {2, 2}}

Alternatively, if you can, remove zeros from the input lists before using Tuples:

Tuples[Join[-Reverse@#, #]&@Range[2],2]

same result

Even if data = Tuples[Range[-2, 2], 2] is already created, processing data to create a zero-free input list and using Tuples on it is (to my surprise) faster than using Pick to remove entries with zeros from pairs of data:

data = Tuples[Range[-100, 100], 2];

ra = Tuples[Join[-Reverse @ #, #]& @ Range[100],2]; // RepeatedTiming // First

0.0000524

rb = With[{r = DeleteCases[DeleteDuplicates @ Flatten[data], 0]},
  Tuples[r, 2]];// RepeatedTiming // First  

0.000178

rc = Pick[data, Unitize[data].{1, 1}, 2];//RepeatedTiming//First (*from @Henrik's answer*)

0.0013

rd = DeleteCases[data, {0, 0}|{1,0}|{0,1}];// RepeatedTiming // First  

0.017

re = DeleteCases[data, {___, 0, ___}];// RepeatedTiming // First   

0.026

rf = Select[data, FreeQ[0] ];// RepeatedTiming // First  (*from David's answer *)

0.060

ra == rb == rc == rd == re == rf

True


Here a more cumbersome (not a code golfer) but faster approach:

data = Tuples[Range[-100, 100], 2];
a = DeleteCases[data, {___, 0, ___}]; // RepeatedTiming // First
b = Pick[data, Unitize[data].{1, 1}, 2]; // RepeatedTiming // First
a == b

0.028

0.00098

True

This skips pattern matching in favor of faster vectorized functions.


Or...

Select[Tuples[Range[-2, 2], 2], ! MemberQ[#, 0] &]

or as @ThatGravityGuy points out...

Select[Tuples[Range[-2, 2], 2], FreeQ[#, 0] &]