A diferença entre UNION e UNION ALL reside na forma como lidam com duplicatas ao combinar os resultados de duas consultas.
UNION: A cláusula UNION combina os resultados de duas consultas, mas remove quaisquer linhas duplicadas do conjunto de resultados combinado. Isso significa que se houver linhas idênticas em ambas as consultas, apenas uma delas será incluída no resultado final.
UNION ALL: Por outro lado, a cláusula UNION ALL também combina os resultados de duas consultas, mas não remove linhas duplicadas. Isso significa que todas as linhas de ambas as consultas serão incluídas no resultado final, mesmo que existam duplicatas.
Em resumo, a diferença principal entre UNION e UNION ALL é que o UNION remove linhas duplicadas, enquanto o UNION ALL mantém todas as linhas, incluindo duplicatas, no resultado combinado.
Exemplo pratico.
Nas tabelas abaixo o nome João conta na tabela clientes e na tabela de Fornecedores
Ao utilizar o UNION na consulta abaixo, será retornado apenas 1 João, sendo que existem dois.
SELECT nome
FROM tblCLientes
UNION
SELECT nome
FROM tblFornecedores
ORDER BY nome;
Se utilizo o UNION ALL, o retorno dos nomes será assertivo, visto que realmente o nome João deverá aparecer duas vezes.
SELECT nome
FROM tblCLientes
UNION ALL
SELECT nome
FROM tblFornecedores
ORDER BY nome;