Una tabla puede unirse a sí misma, produciendo una auto-combinación, SELF-JOIN.
Igualmente, existen departamentos a los cuales no pertenece ningún empleado (Mercadeo).
La segunda es implícita y usa las comas para separar las tablas a combinar en la sentencia FROM, y se usa la sentencia WHERE para establecer las condiciones, la cual entonces es obligatoria para el INNER JOIN pues de lo contrario la sentencia sería un CROSS JOIN (ver más abajo).
Es necesario tener especial cuidado cuando se combinan columnas con valores nulos NULL, ya que el valor nulo no se combina con otro valor o con otro nulo, excepto cuando se le agregan predicados tales como IS NULL o IS NOT NULL.
La sentencia JOIN compara los valores en la columna IDDepartamento en ambas tablas.
Las dos consultas siguientes son similares y se realizan de manera explícita (A) e implícita (B).
A la combinación que utiliza comparaciones dentro del predicado JOIN se le llama theta-join.
Es una variedad del theta-join que usa comparaciones de igualdad en el predicado JOIN.
En este caso se comparan todas las columnas que tengan el mismo nombre en ambas tablas.
Ejemplo de combinación natural: El resultado es un poco diferente al del ejemplo de la tabla anterior, ya que esta vez la columna IDDepartamento se muestra sola una vez en la tabla resultante.
El uso de esta sentencia NATURAL puede producir resultados ambiguos y generar problemas si la base de datos cambia, porque al añadir, quitar o renombrar las columnas puede perder el sentido la sentencia; por esta razón es preferible expresar el predicado usando las otras expresiones nombradas anteriormente.
A diferencia del resultado presentado en los ejemplos de combinación interna donde no se mostraba el empleado cuyo departamento no existía, en el siguiente ejemplo se presentarán los empleados con su respectivo departamento, y adicionalmente se presenta un empleado cuyo departamento no existe.
El empleado que no tiene departamento se encuentra en el área amarilla del diagrama de la derecha, mientras que los empleados con departamento están en el área anaranjada, en la intersección de A y B.
Ejemplo de left join para la combinación externa: Si se quieren mostrar solo los registros de la primera tabla que no tengan correspondientes en la segunda, se puede agregar la condición adecuada en la cláusula WHERE.
En el diagrama de la derecha, los departamentos que no tienen empleados están en el área verde mientras que los departamentos con empleados están en el área anaranjada, en la intersección de A y B.
Ejemplo de right join para la combinación externa: En este caso el área de Mercadeo fue presentada en los resultados, aunque aún no hay empleados registrados en dicha área.
Esto nos dará los departamentos que no tengan asignados ningún empleado.
Para hacer un LEFT JOIN equivalente cambiamos de perspectiva y "volteamos" las tablas.
En el diagrama de la derecha, el área anaranjada representa los empleados que están asociados a un departamento, el área amarilla son los empleados que no están en ningún departamento, y el área verde son los departamentos que no tienen empleados.
Ejemplo de combinación externa completa: Como se puede notar, en este caso se encuentra el empleado Gaspar con valor nulo en su área correspondiente, y se muestra además el departamento de Mercadeo con valor nulo en los empleados de esa área.
El mismo ejemplo puede expresarse así: Si se quieren mostrar solo los registros de las tablas que no tengan correspondencia en la otra, se pueden agregar las condiciones adecuadas en la cláusula WHERE.
A las entradas de una combinación se las llama respectivamente "operando externo(outer)" y "operando interno(inner)", o bien simplemente izquierdo y derecho.
Existen tres algoritmos fundamentales para ejecutar una operación de combinación.
Por cada tupla de la relación externa, se recorre completamente la relación interna, y toda tupla que verifique la condición de combinación se añade al resultado.
El algoritmo puede ser fácilmente generalizado para cualquier número de relaciones.
Naturalmente, este algoritmo tiene un desempeño pobre si alguna de las relaciones es muy grande.
El desempeño puede mejorarse si la relación interna tiene un índice sobre las columnas del predicado de combinación.
Es una optimización técnica para las combinaciones en bases de datos distribuidas.
El predicado JOIN es aplicado en diferentes fases, comenzando con la más temprana.
Esto puede reducir el tamaño de los resultados inmediatos que deben ser intercambiados con nodos remotos, así reduce el tráfico de red entre nodos, esto puede mejorarse con un filtro Bloom.