Questo perché dbms_random()
viene chiamato per ogni riga, quindi può generare risultati duplicati. Invece, se vuoi una riga casuale, prova qualcosa del genere:
select tid
from (select tid,
row_number() over (order by dbms_random.value()) as seqnum
from Train
) t
where seqnum = 1;
Questo restituirà sempre la riga con "seqnum =1", ma sarà un tid
casuale .