Oracle (and not really a self join solution) :
SELECT '(' || A1 || ',' || B1 || '),
(' || A2 || ',' || B2 || '),
(' || A3 || ',' || B3 || ')'
FROM (SELECT T1.A A1,T1.B B1, T2.A A2,T2.B B2, T3.A A3,T3.B B3
FROM (SELECT A,B FROM T) T1,
(SELECT A,B FROM T) T2,
(SELECT A,B FROM T) T3
WHERE T1.ROWID<>T2.ROWID AND
T1.ROWID<>T3.ROWID AND
T2.ROWID<>T3.ROWID
ORDER BY CEIL(DBMS_RANDOM.VALUE(0, 120)))
WHERE ROWNUM<2
SELECT DECODE(rownum,1,'',' OR ') || '(' || A1 || ',' || B1 || '), (' || A2 || ',' || B2 || '), (' || A3 || ',' || B3 || ')'
FROM (SELECT T1.A A1,T1.B B1, T2.A A2,T2.B B2, T3.A A3,T3.B B3
FROM (SELECT A,B FROM T) T1,(SELECT A,B FROM T) T2,(SELECT A,B FROM T) T3
WHERE T1.ROWID<>T2.ROWID AND
T1.ROWID<>T3.ROWID AND
T2.ROWID<>T3.ROWID
ORDER BY CEIL(DBMS_RANDOM.VALUE(0, 120)))
this is solution with 'OR'....
SELECT
distinct a,
b
FROM
t
WHERE
a < b