Skip to main content

SELECT — Referencia de SQL en Marketing Cloud

La cláusula de entrada de cada SQL Query Activity en Marketing Cloud — qué es, qué soporta oficialmente Salesforce, y los patrones de producción que sobreviven a un hand-off.

Referencia·Actualizado 2026-05-07·Escrito por Lira · Editado por German Medina

SELECT es donde arranca cada SQL Query Activity en Marketing Cloud. Le dice al motor qué columnas de un Data Extension o System Data View tienen que llegar al DE de destino. Lo que NO te dice — los tipos de columna, las longitudes, el orden en que las filas terminan — es el origen de la mayoría de los bugs en producción.

Sintaxis oficial

La sintaxis de SELECT en MC SQL es un subset estricto de T-SQL. Soporta proyección con aliases de columna, expresiones y funciones a nivel columna. No hay SELECT INTO (usá INSERT INTO ... SELECT para escribir al destino), no hay SELECT TOP n PERCENT, y ORDER BY no es confiable cuando va envuelto en un INSERT INTO ... SELECT (ver gotchas — #10).

-- Proyección plana
SELECT
  SubscriberKey,
  EmailAddress,
  LoyaltyTier
FROM master_subscribers;

-- Con aliases + expresiones
SELECT
  s.SubscriberKey,
  LOWER(s.EmailAddress) AS EmailAddressNormalized,
  CASE
    WHEN s.LoyaltyTier IN ('gold','silver') THEN 'high'
    ELSE 'standard'
  END AS Segment
FROM master_subscribers s;

-- Con agregado
SELECT
  EmailDomain,
  COUNT(*) AS SubscriberCount
FROM master_subscribers
GROUP BY EmailDomain;

Referencia:

Lo que sobrevive en producción

Evitá SELECT *

-- EN RIESGO — el orden y la presencia de columnas dependen del DE de origen,
-- que puede cambiar entre deploys sin que te enteres
SELECT * FROM master_subscribers;

-- DURABLE — proyección explícita, rompe en voz alta si una columna desaparece
-- en lugar de re-formar el DE de destino en silencio
SELECT
  SubscriberKey,
  EmailAddress,
  LoyaltyTier,
  LastPurchase
FROM master_subscribers;

El wildcard es más rápido de tipear, más lento de debuggear a las 11 de la noche. El dueño del DE agrega una columna, tu DE de destino se desfasa de schema, el próximo Send levanta la forma equivocada — y nada de eso emerge hasta que un journey enruta mal a alguien.

Comentá la intención en los aliases

SELECT
  SubscriberKey,
  EmailAddress,
  -- Alias del resultado de LOWER() para que el nombre de columna del DE
  -- de destino documente que el valor crudo se normalizó al momento del query.
  LOWER(EmailAddress) AS EmailAddressLower
FROM master_subscribers;

El alias es el único lugar donde el próximo dev ve qué decidiste. Una columna EmailAddressLower lleva la decisión; una columna Email1 no lleva nada.

No traigas lo que el destino no necesita

Cada columna del DE de destino es costo de almacenamiento y tiempo de query en la próxima lectura. Si el Send Definition de aguas abajo solo necesita SubscriberKey + EmailAddress, proyectá esas dos — no las ocho que te hicieron falta para computar el filtro.

System Data Views: el set de columnas está documentado, pero ojo con la rotación

Cuando hacés SELECT desde _Subscribers, _Sent, _Open y compañía, el set de columnas está documentado en Salesforce Help. El riesgo no son las columnas que existen — es si el set de filas todavía mapea a los SubscriberKeys que esperás después de una rotación de Send Definition. Ver gotchas — #6.

Decisión rápida

Usá SELECT directo cuando:

  • Estás proyectando desde un solo Data Extension o una sola System Data View hacia un DE de destino.
  • Las columnas que necesitás ya tienen tipo y largo correcto en el origen.
  • El query se mantiene bajo ~3 minutos contra un volumen representativo de producción.

Envolvé SELECT en un paso de staging cuando:

  • Estás transformando con CASE, ops de string, o aritmética de fechas — primero stagéa, dedupeá o validá, después promové.
  • Estás joineando entre más de dos Data Extensions — aplaná por etapas.
  • El origen es una System Data View — primero snapshot a un de_log_* que vos controlás.

No uses SELECT cuando lo que querías era un update:

  • Las SQL Activities de MC no pueden hacer UPDATE. Re-emití la fila vía INSERT INTO ... SELECT con el modo "Update" del DE de destino y la primary key correcta. Ver gotchas — #2.

Relacionado

  • MC SQL gotchas — los 10 que rompen a escala, transversales a todas las cláusulas

Próximas páginas de referencia: Basics · FROM · JOIN · WHERE · LIKE · CASE · INSERT INTO · String / Date / Numeric / Conversion / Aggregate / Null Functions · Style Guide.

Más snippets how-to para debugging común en producción — sends de email, largo de valores, alcance de contactos, etc.