dpkg -l sempre fornecerá a lista correta de pacotes instalados (ou removidos, mas ainda configurados). Na verdade, ele usa dpkg-query para fazer seu trabalho e faz referência ao conteúdo de /var/lib/dpkg/status , que é a referência para os pacotes instalados.
apt usa as mesmas informações, mas até recentemente não fornecia uma maneira fácil de listar os pacotes; apt list agora faz isso, e você obterá os mesmos resultados fornecidos por dpkg -l (em um formato diferente).
dpkg pode ser usado para listar todos os pacotes . Se todo o software em um sistema for instalado usando pacotes, ele listará todo o software; mas se qualquer software tiver sido instalado manualmente, sem um pacote, ele não saberá disso.