Comparando Case y Join en SQL Server

Estructura Case comparada con Join

La estructura Case evalua una expresión condicional y retorna uno de múltiples resultados.

La estructura Case tiene dos formas:

La expresión CASE simple compara una expresión con un conjunto de expresiones simples para determinar el resultado.
La expresión CASE buscada evalúa un conjunto de expresiones booleanas para determinar el resultado.

Ambos formatos admiten un argumento ELSE opcional.

En este artículo vamos a comparar el uso de Case con un Join, es necesario resaltar que si las opciones posibles del Case cambian, es necesario reescribir la consulta.

Usando la base de datos Northwind
use Northwind
go

Ejercicio 1

a. Usando Case para la lista de productos y los nombres de las categorias
select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
Case CategoryID
When 1 then ‘Bebidas’
When 2 then ‘Condimentos’
When 3 then ‘Confecciones’
When 4 then ‘Productos diarios’
When 5 then ‘Cereales’
When 6 then ‘Carnes’
When 7 then ‘Conservas’
When 8 then ‘Productos marinos’ End As Categoría
from Products As P
go

El costo estimado de la consulta usando Case se puede ver en la siguiente imagen.
Costo: 0.0033744

b. Usando Join para listar los productos y su categoría (Ver Joins)
Select P.ProductID as ‘Código’, P.ProductName as ‘Descripción’,
C.CategoryName AS Categoría
from Products As P
join Categories As C on P.CategoryID = C.CategoryID
go
El costo estimado de la consulta usando Joins se puede ver en la siguiente imagen.
Costo: 0.0189873

Si comparamos los valores, Case en este caso es es mas rápido, al usar Join la consulta tiene un costo de 5,63 veces mayor, es necesario anotar nuevamente que si las categorías cambian, la consulta usando Case es necesario reescribirla.

Ejercicio 2

a. Usando las tablas Region y Terrotories con Case
select T.TerritoryID As ‘Código’, T.TerritoryDescription As ‘Territorio’,
Region = case T.RegionID
When 1 then ‘Este’
When 2 then ‘Oeste’
When 3 then ‘Norte’
When 4 then ‘Sur’ End
from Territories As T
go
El plan de ejecución muestra este costo.

b. Usando Join para listar los territorios y las regiones a las que pertenecen
Select T.TerritoryID as ‘Código’, T.TerritoryDescription as ‘Territorio’,
R.RegionDescription AS ‘Región’
from Territories As T
join Region As R on T.RegionID = R.RegionID
go