Realizei um experimento sobre o manuseio dos espaços entre Oracle e SQL Server porque notei a diferença ao usar Oracle para meu trabalho.
(A versão do Oracle é o Oracle 19c e a versão do SQL Server é o SQL Server 2019, pois estes já foram instalados no meu PC.)
Experiência
Oráculo
Realizei um experimento sob a seguinte tabela e dados.
CREATE TABLE CompareTestTable
(
Seq NUMBER
,ColCHAR CHAR(10)
,ColVARCHAR VARCHAR2(10)
);
INSERT INTO CompareTestTable VALUES( 1, 'aaa', 'bbb' ); -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' ); -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' ); -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' ); -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa '; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = 'bbb'; -- Hit SEQ=1 record
select * from CompareTestTable where ColVARCHAR = 'bbb '; -- Hit SEQ=2 record
select * from CompareTestTable where ColVARCHAR = ' bbb'; -- Hit SEQ=3 record
select * from CompareTestTable where ColVARCHAR = ' bbb '; -- Hit SEQ=4 record
O espaço após a string parece ser ignorado quando o tipo de coluna é Char.
No entanto, no caso de Varchar2, o espaço após ou antes da string não parece ser ignorado.
O detalhe segue
https://docs.oracle.com/cd/B13789_01/server.101/b10759/sql_elements002.htm#:~:text=Nonpadded%20Comparison%20Semantics,-Oracle%20compares%20two&text=If%20two%20values%20of% 20diferentes,os%20valores%20são%20considerados%20iguais.
SQL Server
Como no mesmo caso do Oracle, realizei um experimento sob a tabela e os dados a seguir no SQL Server.
CREATE TABLE CompareTestTable
(
Seq INT
,ColCHAR CHAR(10)
,ColVARCHAR VARCHAR(10)
)
INSERT INTO CompareTestTable VALUES( 1, 'aaa', 'bbb' ); -- No space
INSERT INTO CompareTestTable VALUES( 2, 'aaa ', 'bbb ' ); -- A space after a string
INSERT INTO CompareTestTable VALUES( 3, ' aaa', ' bbb' ); -- A space before a string
INSERT INTO CompareTestTable VALUES( 4, ' aaa ', ' bbb ' ); -- Spaces after and before a string
select * from CompareTestTable where ColCHAR = 'aaa'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = 'aaa '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColCHAR = ' aaa'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColCHAR = ' aaa '; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = 'bbb'; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = 'bbb '; -- Hit SEQ=1,2 records
select * from CompareTestTable where ColVARCHAR = ' bbb'; -- Hit SEQ=3,4 records
select * from CompareTestTable where ColVARCHAR = ' bbb '; -- Hit SEQ=3,4 records
O resultado do Char é o mesmo do Oracle.
No entanto, no caso de Varchar, o resultado é diferente entre Oracle e SQL Server, os espaços após ou antes da string parecem ser ignorados.
Portanto, deve-se observar ao usar varchar devido à diferença entre Oracle e SQL Server como tal acima.