Uma boa escolha para Ola pessoal,talvez voces ja tenham visto isso em algumas SPs e Views em que aparece o recurso "coluna1 + coluna2 + coluna3 + ... + colunaN" selecionando-as como uma chave, combinandocom outra tabela e fazendo operacoes de conjuntos, por exemplo:SELECT * FROM#TESTE1 as AWHEREA.CAMPO1 + A.CAMPO2 -- <-- "chave" da tabela ANOT IN(SELECT B.CAMPO1 + B.CAMPO2 -- <-- "chave" da tabela BFROM #TESTE2 as B)Significa que quero todos os elementos da tabela A, com excecao dos quesao igual aos da tabela B ligados pela "chave" CAMPO1 + CAMPO2 iguais ou seja, eequivalente a operacao algebrica:conjunto (A) - (B)Esse artificio e comum e funciona, mas tem um problema serio de performancepois o SQL tera que concatenar as colunas da primeira table, depois da segunda,para so depois verificar se existe ou nao. Quanto maiores forem as tabelas,geometricos sao os tempos de demora.Bem, existe uma maneira melhor de fazer subtracao de conjuntos no SQL ondeeu nao preciso combinar as colunas para fazer um elemento que responda comouma chave, veja os exemplos a seguir, execute-os em um banco e acompanhe osresultados:A vantagem e que o SQL encherga as colunas das duas tabelas e, com isso, pode fazer uma pesquisa muito mais rapida.Exemplo mostrando a equivalenciaDROP TABLE #TESTE1DROP TABLE #TESTE2CREATE TABLE #TESTE1(TIPO CHAR(10),ALIMENTO CHAR(10),VAL1 INT,VAL2 INT)CREATE TABLE #TESTE2(TIPO CHAR(10),ALIMENTO CHAR(10),VAL1 INT,VAL2 INT)SET NOCOUNT ONINSERT INTO #TESTE1 VALUES('FRUTA','BANANA',1,1)INSERT INTO #TESTE1 VALUES('FRUTA','ABACAXI',1,1)INSERT INTO #TESTE1 VALUES('LEGUME','FEIJAO',1,1)INSERT INTO #TESTE1 VALUES('LEGUME','AMENDOIM',1,1)INSERT INTO #TESTE2 VALUES('FRUTA','CEREJA',1,1)INSERT INTO #TESTE2 VALUES('FRUTA','ABACAXI',1,1)INSERT INTO #TESTE2 VALUES('LEGUME','FEIJAO',1,1)INSERT INTO #TESTE2 VALUES('LEGUME','AMENDOIM',1,1)/* aqui, selecionamos todos os alimentos de mesmo tipoque tenham no primeiro, menos os que ja existam no segundo.isso da a ideia de incremento entre as tabelas A e B.*/SELECT * FROM #TESTE1WHERE TIPO + ALIMENTONOT IN(SELECT TIPO + ALIMENTO FROM #TESTE2)/* o resultado e o mesmo, mas nesse exemplo o SQL ve as chavese com isso pode combinar de uma maneira mais inteligente para.obter equivalencias entre as tabelas. O banco seleciona a colunacom menos elementos e faz a combinacao delas, em seguida, combinaos dados da segunda coluna (ou a coluna com mais elementos, consecutivamente)assim, ele consegue uma busca muito mais rapida.*/SELECT * FROM #TESTE1 AS AWHERENOT EXISTS(SELECT TIPO,ALIMENTOFROM #TESTE2 AS BWHEREA.TIPO = B.TIPOAND A.ALIMENTO = B.ALIMENTO) funciona tanto com o ubuntu como as distribuicoes similares ao Debian.As vezes ao fazer migracoes ou utilizar de maneira errada o comando "rm" acontece apagamentos acidentais de programas no sistema operacional.Nao entrarei no merito de ensinar a recuperacao geral, como documentos, apresentacoes, imagens ou outros tipos de arquivo.No caso, serao arquivos do proprio sistema operacional, quando ocorre de programas comecarem a falhar para iniciar ou espetam pedindo libs que antes nao eram pedidas antes.Passos:instale pelo "central de programas", o pacote chamado debsums. Este programa serve para verificar a integridade dos pacotes instalados.rode da seguinte maneira:debsums -aso sub-comando "-a" e para analisar todos os pacotes, e o "-s" avisa somente dos arquivos de pacotes que contenham alguma irregularidade ou alteracao.root@machinename:~# debsums -asdebsums: missing file /opt/Adobe/Reader9/Reader/intellinux/lib/libldap.so (from acroread package)debsums: changed file /opt/Adobe/Reader9/Browser/HowTo/ENU/Browser_Plugin_HowTo.tx (from acroread package)debsums: changed file /etc/apache2/sites-available/default (from apache2.2-common package)debsums: missing file /usr/share/doc/apache2.2-common/README.backtrace (from apache2.2-common package)no exemplo acima, o pacote