A comparação entre variáveis VARCHAR2 e CHAR podem retornar falso caso estejam guardando as mesmas sequências de caracteres. Isso acontece porque se atribuirmos um valor a uma variável do tipo CHAR menor que o tamanho definido para ela, será preenchido com espaços. Isso não acontece com VARCHAR2, que conterá apenas o tamanho que for atribuído à variável.

declare
  x1 varchar2(10);
  x2 char(10);
begin
   x1:= 'xomano';
   x2:= 'xomano';
   if x1 = x2 then
           dbms_output.put_line('exatamente iguais');
   else
           dbms_output.put_line('diferente!');
   end if;
end;

Saída: diferente!


Para que o resultado seja igual, devemos usar a função Trim na variável de tipo CHAR para que ela possa 'aparar' os espaços preenchidos pelo Oracle.

declare
  x1 varchar2(10);
  x2 char(10);
begin
   x1:= 'xomano';
   x2:= 'xomano';
   if x1 = trim(x2) then
           dbms_output.put_line('exatamente iguais');
   else
           dbms_output.put_line('diferente!');
   end if;
end;

Saída: exatamente iguais


Nota

Não é recomendado utilizar o tipo CHAR para guardar várias sequências de caracteres, pois pode acabar havendo alguns problemas além de comparação entre strings de tipo diferente como o VARCHAR2. Precisar usar a função Trim pode comprometer performance além do fato do Oracle alocar todo o espaço indicado para a variável de tipo CHAR.