Tu problema es de conflicto de collation (metodo de intercalacion de sql).
Una solucion es agregar el collation en la tabla temporal que estas utilizando, tomando el mismo que tiene tu tabla fisica a la que le estas haciendo el select, en este caso creo que es losdepartamentos el campo eltrabajador.
Para ver el collation de un campo solo ejecuta el siguiente comando sobre la tabla en cuestion, en la lista de campos al final viene una columna con el collation correspondiente. Ese mismo es el que debes manejar en la comparacion o en la definicion del campo de tu tabla temporal...
Código:
sp_help 'losdepartamentos'
te anexo ejemplo... espero te sea de utilidad...
Código:
--------------------------------------------------
-- Antes de crear una temporal de sesion se debe
-- verificar que no exista si existe la eliminamos
--------------------------------------------------
If object_id('tempdb..#tablatemporal') is null drop table #tablatemporal
----------------------------------------------------------------------
-- Se define como llave primaria ya que sabemos que no se repetira
-- y optimizamos la consulta con dicha tabla
----------------------------------------------------------------------
CREATE TABLE #tablatemporal (trabajador char(6) Primary Key)
----------------------------------------------------------------------
-- Usamos Group by en lugar de distinct
----------------------------------------------------------------------
Set @subconsulta = 'SELECT ELtrabajador FROM todoslostrabajadores group by ELtrabajador '
SET @InserSubConsulta = 'INSERT INTO #tablatemporal (trabajador) '+ @subconsulta
EXEC (@InserSubConsulta)
----------------------------------------------------------------------
-- Debido a que eltrabajador y trabajador tienen diferente collation
-- se especifica el collate que debe ser usado al compararlos.
-- Si no se quiere o no se puede poner aqui el collation se puede
-- definir la tabla temporal con el mismo collate que tiene el campo
-- eltrabajador en la tabla losdepartamentos. p.e.
-- CREATE TABLE #tablatemporal (trabajador char(6) collate Latin1_General_CI_AI Primary Key)
----------------------------------------------------------------------
SET @SQL = @SQL + ' SELECT departamento '
SET @SQL = @SQL + ' FROM losdepartamentos '
SET @SQL = @SQL + ' WHERE eltrabajador collate Latin1_General_CI_AI IN '
SET @SQL = @SQL + ' (SELECT trabajador collate Latin1_General_CI_AI FROM #tablatemporal)'
EXEC (@SQL)
--------------------------------------------------
-- despues de terminar de usar la temporal
-- la eliminamos explicitamente
--------------------------------------------------
If object_id('tempdb..#tablatemporal') is null drop table #tablatemporal
Saludos!