SQL> SELECT 'SQL IN contatena espaços em branco!' CAMPO
2 FROM DUAL
3 WHERE 'SP ' IN ( 'SP', 'RJ' )
4 /
CAMPO
-----------------------------------
SQL IN contatena espaços em branco!
SQL>
SQL> SELECT 'SQL IN contatena TAB!' CAMPO
2 FROM DUAL
3 WHERE 'SP ' IN ( 'SP', 'RJ' )
4 /
CAMPO
---------------------
SQL IN contatena TAB!
SQL>
SQL> SELECT 'SQL IN não concatena espaços na esquerda!' CAMPO
2 FROM DUAL
3 WHERE ' SP' IN ( 'SP', 'RJ' )
4 /
no rows selected
SQL>
SQL> DECLARE
2 VTEMP VARCHAR2(100);
3 BEGIN
4 SELECT 'SQL IN contatena espaços em branco!' CAMPO
5 INTO VTEMP
6 FROM DUAL
7 WHERE 'SP ' IN ( 'SP', 'RJ' );
8
9 DBMS_OUTPUT.PUT_LINE('Concatenou');
10
11 EXCEPTION WHEN NO_DATA_FOUND THEN
12 DBMS_OUTPUT.PUT_LINE('não concatenou');
13 END;
14 /
Concatenou
PL/SQL procedure successfully completed.
SQL>
SQL> DECLARE
2 VTEMP VARCHAR2(100);
3 VALOR VARCHAR2(10) :='SP ';
4 BEGIN
5 SELECT 'SQL IN contatena espaços em branco!' CAMPO
6 INTO VTEMP
7 FROM DUAL
8 WHERE valor IN ( 'SP', 'RJ' );
9
10 DBMS_OUTPUT.PUT_LINE('Concatenou');
11
12 EXCEPTION WHEN NO_DATA_FOUND THEN
13 DBMS_OUTPUT.PUT_LINE('não concatenou');
14 END;
15 /
não concatenou
PL/SQL procedure successfully completed.
SQL>
Mais uma prova que usar BINDS é sempre uma boa. "Montar" comandos SQL dinamicamente pode acarretar essa concatenação acima.