Tambien se puede podría hacer otra cosa.
1º declarar un array para contener lo números que van saliendo, sin repetir.
2º declarar una variable de tipo conjunto para poder controlar si y han salido antriormente.Poco más o menos así:
Código Delphi
[-]var NumOk: array [1..20] of integer;
YaUtiliados: set of Byte; n, num: integer;
begin
YaUtilizados:= [] randomize;
for n:= 1 to 20 do
begin
Repeat
num:= random(20) + 1;
Until not (num in YaUtilizados);
NumOk[n]:= num; YaUtilizados:= YaUtilizados + [num] end;
Bueno, es posible que haya alguna incorrección, pero básicamente esta es la idea. Así no tendrías ningún número repetido.
Espero te sirva la idea.