Same idea as kguler, different formulation:
lst = {{{2, 1}, {4, 3}, {2, 4}}, {{2, 1}, {4, 3}, {3, 1}},
{{2, 1}, {2, 4}, {3, 1}}, {{4, 3}, {2, 4}, {1, 2}}};
Pick[#, Signature /@ #[[All, All, 1]], 1 | -1] & @ lst
{{{2, 1}, {4, 3}, {3, 1}}, {{4, 3}, {2, 4}, {1, 2}}}
On relatively short sublists UnsameQ should be faster than Signature:
Pick[#, UnsameQ @@@ #[[All, All, 1]]] & @ lst
Here are comparative timings for all methods posted so far, with the exception of Cases[lst, {{a_, _}, {b_, _}, {c_, _}} /; a != b != c] because that does not scale. I also changed lst /. {___, {a_, _}, ___, {a_, _}, ___} :> Sequence[] to apply only to level 1 because otherwise it is orders of magnitude slower.
Functions are given in increasing order of speed as tested:
SetAttributes[timeAvg, HoldFirst]
timeAvg[func_] :=
Do[If[# > 0.3, Return[#/5^i]] & @@ Timing@Do[func, {5^i}], {i, 0, 15}]
lst = RandomInteger[19, {2500, 7, 2}]; (*sample data*)
Select[lst, (DeleteDuplicates[First /@ #] == First /@ #) &] // timeAvg
Replace[lst, {___, {a_, _}, ___, {a_, _}, ___} :> Sequence[], {1}] // timeAvg
DeleteCases[lst, {___, {a_, _}, ___, {a_, _}, ___}] // timeAvg
Select[lst, Length[Union[#[[All, 1]]]] == Length[#[[All, 1]]] &] // timeAvg
Pick[lst, (DeleteDuplicates[#] == #) & /@ Map[First, lst, {2}]] // timeAvg
Pick[lst, (DeleteDuplicates[#] == #) & /@ lst[[All, All, 1]]] // timeAvg
Pick[#, Signature /@ #[[All, All, 1]], 1 | -1] &@lst // timeAvg
Pick[#, UnsameQ @@@ #[[All, All, 1]]] &@lst // timeAvg
0.01684
0.01248
0.01248
0.007864
0.005736
0.003992
0.003248
0.0020464
Update: my second data set was poor as nothing would be selected. Timings updated using a data set which results in about 50% selection.
With data of a very different shape: lst = RandomInteger[2*^6, {25, 1700, 2}]; the order changes quite a bit: (functions tested in the same order as above)
0.00824
127.624
144.831
0.003624
0.02496
0.005864
0.008864
0.1654
With long sublists the pattern-based tests are revealed to be very slow, and as I expected (from prior testing) UnsameQ falls way behind Signature. Kale's function is the fastest; it can be made a bit faster (and shorter) by rewriting as:
Select[lst, Length @ Union @ #[[All, 1]] == Length @ # &]